私は古い汚いスパゲッティ コードの多くを書き直しており、現在、クラス、関数を把握し、MVC モデルを中心にサイトを大まかに再構築しようとしています。
ただし、メインの構成ファイルによって自動ロードされるユーザー アカウントの詳細を参照するためのヘッダー テンプレート インクルードを取得できず、非常に重要な手順を見逃していると思います。
エラーメッセージはFatal error: call to member function is_loggedin() on a non-object...
.
更新: header.tpl.phpvar_dump(get_included_files())
内で a を実行すると、account.class.php と template.class.php の両方が (この順序で) 含まれていることがわかります。また、header.tpl.php の上部に account.class.php を手動で含めて、違いが生じるかどうかを確認しました...違いはありませんでした。ヘルプ :(
$_account->is_loggedin()
index.php から問題なく呼び出すことができることにも注意してください。含まれているファイル header.inc.php 内からではありません。
私はこれをすべて間違っている可能性があります。
index.php
<php require 'defaults.php'; ?>
<html>
<head>
...
</head>
<body>
<?php $_template->load('header'); ?>
....
</body>
defaults.php
session_start();
// define path settings
// connect to database, memcache
// lots of other stuff....
//autoloader for functions
spl_autoload_register(function ($class) {
if (file_exists(CLASS_PATH.DS.$class.'.class.php'))
{
include CLASS_PATH.DS.$class.'.class.php';
}
});
$_account = new account(); // autoload user account stuff
$_template = new template(); // autoload templates
account.class.php
class account
{
private $db;
public function __construct($db) {
$this->db = $db;
}
public function is_loggedin() {
// do various session checks
}
}
template.class.php
class template
{
public function load($template)
{
if (file_exists(TPL_PATH.DS.$template.'.tpl.php'))
{
include TPL_PATH.DS.$template.'.tpl.php';
}
}
}
header.tpl.php
<div id="header">
<?php if($_account->is_loggedin() == true): ?>
<p>logged in</p>
<?php else: ?>
<p>not logged in</p>
<?php endif; ?>