我收到这个奇怪的错误。是财产。
我收到一个错误。
// PHP Notice: Undefined property: stdClass::$roles in
$canWrite = $this->session->isLoggedIn() ? $this->page->canWrite($this->session->user->roles) : false;
这就是Class。
class User {
protected $roles;
function getRoles() {
if (!$this->roles)
{
// Get them!
}
return $this->roles;
}
}
所以这个方法是当我尝试访问该行中的属性时调用。
UPD1
$this->user->session
是一个User
目的
function getUser() {
if (!$this->user) {
$u = new User();
// Logic
$this->user = $u;
}
return $this->user;
}
User Object
(
[roleId:protected] => 1
[roles:protected] => Array
(
[root] => Role Object
(
[id:protected] => 1
[hrefname:protected] => root
)
)
)
UPD2
所有属性都可以通过魔法访问__get()
public function __get($var) {
if ($this->__isset($var)) {
$method = 'get'.ucfirst($var);
if (method_exists($this, $method)) {
return $this->$method();
} else {
return $this->$var;
}
}
throw new Exception("Unrecognized attribute '$name'");
}
UPD3
var_dump($this->session->user)
object(User)#370 (30) {
["roles":protected]=>
array(1) {
["root"]=>
object(Role)#372 (2) {
["id":protected]=>
string(1) "1"
["hrefname":protected]=>
string(4) "root"
}
}
}
解释
在一个地方我不小心写到了$this->session->user->id = $user->id
在地方$this->session->user
尚未创建。null->id
实际上是(new stdClass())->id
。谢谢你,PHP。
答案
因为它说未定义的属性位于stdClass
,这意味着所讨论的对象实际上不是User
你认为是的类。
这通常意味着对象的创建出现了问题。
查找创建对象的位置。
在没有看到其余代码的情况下,我无法提供更多帮助,但希望有所帮助。
[EDIT]
抛出错误的对象是$this->session->user
(这是您正在尝试访问的->roles
财产)。
正如你想说的那样,这绝对是一个User
对象,事实是 PHP 另有说法。var_dump($this->session->user)
就在错误发生之前,您应该能够看到我在说什么。
至于为什么不是你所期望的,我仍然无法给出更好的答案。调试一次一行地跟踪程序可能会有所帮助。