【发布时间】:2009-07-13 15:20:57
【问题描述】:
当我创建控制器时,我将模型(AccountModel)加载到类变量“Model”并检查用户是否登录:
function __construct()
{
parent::__construct();
$this->loadModel("AccountModel", "Model");
$account = $this->getUserAccount();
...
}
getUserAccount() 发生致命错误:
致命错误:在第 57 行的 wwwroot/lib/account/account.php 中的非对象上调用成员函数 getAccount()
这是第 57 行,我在之前加载的模型上调用 getAccount():
$account = $this->Model->getAccount($_SESSION["account"]["user_account_id"]);
所以,看起来$this->Model 不是对象,但是当我在调用getAccount() 之前放置var_dump($this->Model) 时,它会显示object(AccountModel)#26 (2) ... p>
我也做了var_dump($this),它转储了控制器,发现类变量$Model存在并且是AccountModel的实例。
谁能告诉我到底发生了什么?
顺便说一句,模型是这样分配的(控制器方法):
function loadModel($model_name, $var_name)
{
// blah blah blah
$obj = new $class_name();
$this->$var_name = $obj;
}
更新:
在 __construct() 中,如果我直接在我的模型上调用 getAccount()(之前我调用了 getUserAccount,然后在其中调用了 getAccount)而不参数,PHP输出错误说:
缺少参数 1 AccountModel::getAccount()
但是当我添加参数时,它又说它不是对象。
解决办法:
加载模型时,方法 loadModel() 将模型分配给控制器实例,并将加载模型的每个名称存储到静态属性中。第二次调用控制器时发生错误,因此控制器的第二个实例并没有真正得到它的模型。将 staitc 属性替换为对象属性(检查模型是否已被调用避免使用 require_once 降低开销,但现在必须为该部分找到更好的解决方案;)无论如何,现在它可以工作了,感谢大家的帮助。
【问题讨论】: