我写了一些代码:
class a{
public $b=['f'=>'c'];
}
$a=new a;
$b='b';
echo $a->$b['f'];
当我使用cli时,它输出'c',但是当我使用apache http服务器时,抛出错误
Illegal string offset 'f'
,所以我不知道 ->
之间哪个优先级更高和 [
.没有关于->
的介绍在 http://php.net .我的 PHP 版本是 5.6 并使用 windows 10。在 Linux cli 和 httpd 中将输出“c”
最佳答案
有关 ->
之间优先顺序的一般概念和 [
,您可能需要查看 PHP7 迁移文档 here .
我知道你在谈论 PHP5,但迁移文档关注这一点,因为 PHP5 和 PHP7 之间的行为发生了变化。
回答您的问题,$foo->$bar['baz']
被解释为 $foo->{$bar['baz']}
在 PHP5 中。这意味着您的代码应该抛出错误,因为它正在尝试访问 $b['f']
正在使用时 $b='b';
如$b
的定义.
但是,在 PHP7 中它被解释为 ($foo->$bar)['baz']
,所以在这里它应该像你期望的那样工作。
您确定您的 CLI 没有使用 PHP7 吗?
关于PHP 对象运算符优先级 (->),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45410769/