【问题标题】:PHP: limitation of variable variablesPHP:变量变量的限制
【发布时间】:2011-06-04 16:48:30
【问题描述】:

在 php 中我可以这样做:

$class = 'Notes';
echo $class::message();

但似乎在一个方法中,我不能这样做:

echo ($this->myClass)::message(); 

也不能这样做:

echo someFunctionThatReturnsClassName()::message();

谁能解释为什么?并给出一些关于这种间接机制何时以及如何工作的规则?

谢谢 吉迪

【问题讨论】:

    标签: php indirection


    【解决方案1】:

    这不是变量变量的问题,而是 PHP 不允许这种语法的问题。有一个在核心中解决这个问题的建议,但是这个还没有被接受:http://wiki.php.net/rfc/fcallfcall(还有http://wiki.php.net/rfc/functionarraydereferencing

    【讨论】:

    • 谢谢,这很好地回答了我的第二个例子,但不是我的第一个
    • 嗯,是的,理论上你的第一个是一样的:通过添加括号 (),你告诉 PHP 解释器执行那部分代码,然后调用那部分的静态方法。哪个会失败。如果你这样做 $temp = ($this->myClass); $temp::message(),它会像一个魅力一样工作。
    • 不确定添加括号的观点。 $this->myClass::message() 也不起作用。我知道使用 $temp 可以完成这项工作,我的问题是为什么,$this->var 与简单的 $var 有何不同。
    • 没有括号,你有一个特殊的情况。 PHP 将 $this->var 视为获取字符串值。如果你说 $this->var::foo(),你是在一个字符串而不是一个“变量变量”上调用 foo()。
    • 很有趣,这个:$class='Notes'; ($class)::message();也失败了?这个怎么样: ('Notes')::message();还有这个:(Notes)::message()?
    猜你喜欢
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多