我收到这个奇怪的错误。财产。

我收到一个错误。

// 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)就在错误发生之前,您应该能够看到我在说什么。

至于为什么不是你所期望的,我仍然无法给出更好的答案。调试一次一行地跟踪程序可能会有所帮助。

来自: stackoverflow.com