【发布时间】:2019-02-12 03:50:35
【问题描述】:
将我的一些非静态变量换成静态变量后,我得到了一些类似于这里的表达式。这会引发语法错误,但我不知道为什么。
Class Bar {
public static $name = "bar";
}
Class Foo {
public function getParent(){
$this->parentClass = new Bar();
return $this;
}
}
$foo = (new Foo())->getParent();
echo ($foo->parentClass)::$name; //this line is throwing a syntax error
//output:
PHP Parse error: syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM)
如果我将对象分配给一个变量,那么它不会抛出错误:
$class = $foo->parentClass;
echo $class::$name;
//outputs "bar";
我可以想象可能会遇到一些意外的操作顺序问题,但无法弄清楚为什么这是一个语法错误,我想知道是否有一种方法可以在单行表达式中执行此操作。 (由于这个问题是由大量查找/替换引起的,最好将其保留在一行中)
【问题讨论】:
-
哪个php版本? php 7.2 没有语法错误。
-
我使用的是 PHP 5.6,我注意到它可以在 PHP >7 上运行,但不幸的是我们的系统还没有支持
-
一种方法是在
Bar中创建一个返回静态变量的方法,而不是尝试直接访问它。像这样的东西:3v4l.org/lKkZZ。然后你甚至可以在一行中完成(在实例化之后继续链接)
标签: php syntax syntax-error