3

私は古い汚いスパゲッティ コードの多くを書き直しており、現在、クラス、関数を把握し、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; ?>
4

1 に答える 1