PHP 对象运算符优先级 (->)

标签 php

我写了一些代码:

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/

相关文章:

php - JavaScript location.reload() 正在丢失发布数据

php - 是否有一个函数可以检查数组键是否存在,如果存在,则在一次调用中获取值?

php - 分解字符串然后从数据库中获取

php - 在跳过缩写的同时将驼峰大小写格式化为可读的 PHP

PHP 解析 $_POST 数组?

php - 如何在 Laravel 中自定义日期修改器?

php - 如何在 Yii2 框架中处理 CSRF 验证?

php - 有什么办法可以打印出 Nagios 服务正常运行时间百分比?

php - 我可以测试回调是否有效吗?

javascript - 控制台错误 - 解析 AJAX JSON 解析