【问题标题】:How can I access an object attribute that starts with a number?如何访问以数字开头的对象属性?
【发布时间】:2011-03-15 12:12:01
【问题描述】:

我正在处理现有的代码库并返回一个具有以数字开头的属性的对象,如果我在该对象上调用print_r,我可以看到该对象。

假设它是$Beeblebrox->2ndhead。当我尝试这样访问它时,出现错误:

解析错误:语法错误,意外的 T_LNUMBER,需要 T_STRING 或 T_VARIABLE 或 '{' 或 '$'

如何获得该属性?

【问题讨论】:

  • 我知道您在处理现有代码,但为了完整起见,我想补充一下,应该避免使用强制使用大括号语法的变量。变量名称的“正常”使用更广为人知且更易于阅读。
  • 我只是answered 一个类似的问题;如果您在使用 all numbers 的属性时遇到问题,您可以在那里找到解决方案。

标签: php object


【解决方案1】:

你也可以这样做:

$aux = '2ndhead';
$Beeblebrox->$aux;

【讨论】:

    【解决方案2】:

    这个呢:

    $Beeblebrox->{'2ndhead'}
    


    实际上,您几乎可以对任何类型的变量执行此操作——即使是那些不是类属性的变量。

    例如,您可以考虑包含空格的变量名称;以下语法将起作用:

    ${"My test var"} = 10;
    echo ${"My test var"};
    

    即使,很明显,你不能做这样的事情:

    $My test var = 10;
    echo $My test var;
    


    不过,不知道它在内部是如何工作的……经过一番搜索,我在 PHP 手册中找不到任何关于此的内容。

    我能找到关于{} 和变量的唯一信息在这里:Variable parsing——但与当前主题不太相关...


    但这里有一篇文章展示了其他一些可能性,并且比我在此处发布的示例更进一步:PHP Variable Names: Curly Brace Madness

    还有一个提供一些关于解析方式的附加信息:PHP grammar notes

    【讨论】:

    • 是的 - 就是这样!你比我还早回答! :)
    • 如果您想详细说明为什么它有效并且需要它(也许您比我知道的更多?),这将使该页面更加有用和有趣。
    • 抱歉,我真的不知道为什么会这样——我只知道它确实有效 ^^ (不过,我已经编辑了我的答案以提供更多信息)
    【解决方案3】:

    在我问这个问题之前,我实际上是从同事那里找到了答案,但在 Google 上找不到,所以我想在这里发布它,以防其他人遇到同样的问题。

    我可以像这样访问该属性:

    $Beeblebrox->{'2ndhead'}
    

    拥有以数字开头的属性或变量是不合法的,但不知何故,像这样的动态引用使之成为可能。对我来说,这似乎是语言中的一个奇怪漏洞。

    【讨论】:

      猜你喜欢
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 2017-04-04
      • 1970-01-01
      • 2011-08-27
      • 2021-11-03
      • 2016-02-26
      相关资源
      最近更新 更多