【问题标题】:PHP Object Access Syntax Question with the $带有 $ 的 PHP 对象访问语法问题
【发布时间】:2010-06-09 12:06:52
【问题描述】:

我一直在寻找这个答案时遇到了麻烦,因为我不太清楚如何表达它。我是 PHP 新手,但我仍然脚踏实地。我正在编写一个页面,其中包含一个具有属性名称的类。当我最初编写页面时没有类,所以我只有一个名为$name 的变量。当我把它封装在一个类中时,我不小心把它改成了$myClass->$name。它让我意识到我需要的语法是$myClass->name。花了这么长时间的原因是我不断收到的错误是“尝试访问空属性”或类似的东西。这个错误让我相信这是一个数据填充错误。

我的问题是$myClass->$name 有一个有效的含义吗?换句话说,是否有时间您会使用它以及它不会产生语法错误的原因?如果是这样,该代码的语义是什么?如果它有效,我什么时候使用它?如果它无效,是否有它不会产生语法错误的原因?

【问题讨论】:

    标签: php syntax


    【解决方案1】:

    是的。

    $name = "bar";
    echo $myClass->$name; //the same as $myClass->bar
    

    我同意错误消息不是很有帮助。

    【讨论】:

    • 那么如果我在 $myClass 上有一个属性是 $bar 那么语法会访问它吗?我只是想确保我清楚这一点。不过这是有道理的。
    • 是的。类 Foo { 公共 $bar; } $foo = 新的 Foo(); $foo->bar = 3.1415926; $name = "酒吧";回声 $foo->$name; //输出:3.1415926
    • @ImperialLion 你也可以有一个名为“$bar”的属性,但这会很奇怪,但有可能,就像$name = "\$bar"; $obj->$name = "foo"一样。
    • 正是我正在寻找的那种洞察力。我知道这一定是我不理解语言语义的东西。这真的有助于我理解语言。谢谢
    【解决方案2】:

    阅读variable variables

    类属性也可以使用变量属性名来访问。变量属性名称将在进行调用的范围内解析。例如,如果您有 $foo->$bar 之类的表达式,则将检查 $bar 的本地范围,并且 其值将用作 $foo 的属性名称。如果$bar 是一个数组访问也是如此。

    【讨论】:

      【解决方案3】:

      $myClass->$name 是“变量属性名称”。它以字符串的形式访问名称在变量$name 中的属性。您收到“空属性”错误的原因是您没有名为 $name 的变量(或者它是 null

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-11
        • 1970-01-01
        • 1970-01-01
        • 2019-11-20
        • 1970-01-01
        • 2011-05-02
        • 2011-09-21
        • 2011-07-29
        相关资源
        最近更新 更多