【问题标题】:Accessing object property returns property name with $访问对象属性返回带有 $ 的属性名称
【发布时间】: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); 返回我的对象​​,因为我在我的班级 myClasspublic 函数(方法)中。

为什么我不能访问该密钥,但例如当我访问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'})来访问它,受保护的不是标识符的一部分。

标签: php arrays oop


【解决方案1】:

成员名称是myname - print_r 的输出中显示的:protected 只是调试信息,表明它是对象的受保护成员。

因此,从类方法中,您可以通过以下方式访问成员:

$this->myname

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多