【发布时间】:2015-11-10 12:22:12
【问题描述】:
我在访问对象属性时遇到问题。它应该很简单,但我得到了
注意:未定义的属性:myClass::$myname:protected in ...
当我执行print_r 时,我的对象看起来像这样:
myClass Object
(
[myname:protected] => Array
(
[key1] => stdClass Object
(
[slug] => name
[name] => Big Name
)
.
.
.
[mykey] => stdClass Object
(...
我尝试打印
print_r($this->{'myname:protected'});
看看我能不能把数组拿出来,我可以从中得到我需要的东西。但是我得到了上述错误。
print_r($this); 返回我的对象,因为我在我的班级 myClass 的 public 函数(方法)中。
为什么我不能访问该密钥,但例如当我访问print_r($this->mykey->property1) 时,我可以轻松获取mykey 对象的任何属性?
为什么要在名字前面加上$?我知道一些oo php,但我仍然是初学者。我有一个
protected $myname;
在文件的开头,我在我的__construct() 中使用它
public function __construct($myname){...}
注意:我正在尝试修改并找出其他人的代码,所以我还不能 100% 确定每个部分的作用:\
编辑:
当我这样做时
print_r($this->myname);
我得到了我需要的数组。谁能澄清这是为什么?谢谢。
【问题讨论】:
-
protected是私有的形式,所以只能从类内部访问。如果您想从课堂外获取它,请执行public function getMyname() { return $this->myname; }之类的操作 -
看到这个可能有帮助:stackoverflow.com/questions/17082204/…
-
所以最后只是因为该变量受到保护,我才得到通知。奇怪的是我在课堂上(试图打印出来),所以我认为这不重要。
-
你应该使用
($this->{'myname'})来访问它,受保护的不是标识符的一部分。