首页 / PHP / “PHP通知:未定义的属性”
“PHP通知:未定义的属性”
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了“PHP通知:未定义的属性”,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2003字,纯文字阅读大概需要3分钟。
内容图文
![“PHP通知:未定义的属性”](/upload/InfoBanner/zyjiaocheng/743/6c59acb1184b4ca58aa649a628f6ba23.jpg)
我收到了这个奇怪的错误.你会说:“为什么这么奇怪?你只是没有这样的财产”.不,问题是有财产.
我在那里得到一个错误.
// PHP Notice: Undefined property: stdClass::$roles in
$canWrite = $this->session->isLoggedIn() ? $this->page->canWrite($this->session->user->roles) : false;
这是班级.
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($这 – >会话级>用户)
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->用户.所以null-> id实际上是(new stdClass()) – > id.好的,谢谢你,PHP.
解决方法:
因为它表示未定义的属性在stdClass中,这意味着所讨论的对象实际上并不是您认为的User类.
这通常意味着对象的创建出了问题.因此,导致此错误的代码中的实际错误在程序中比您给我们的代码行早.
查找对象的创建位置.这就是问题可能出现的地方.
如果没有看到其余的代码,我就无法获得更多的帮助,但希望有所帮助.
[编辑]
抛出错误的对象是$this-> session-> user(这是您尝试访问 – > roles属性的对象).
尽管你想说它绝对是一个User对象,但事实是PHP却说不然.在错误发生之前立即执行var_dump($this-> session-> user),您应该能够看到我在说什么.
至于为什么不是你所期望的,我仍然无法给出任何更好的答案.使用像xDebug这样的调试器一次一行地跟踪程序可能会有所帮助.
内容总结
以上是互联网集市为您收集整理的“PHP通知:未定义的属性”全部内容,希望文章能够帮你解决“PHP通知:未定义的属性”所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。