PHP对象间接寻址运算符的运算符优先级(->;)
“正式文档”页上的中缺少对象间接寻址运算符(PHP对象间接寻址运算符的运算符优先级(->;),php,operators,operator-precedence,Php,Operators,Operator Precedence,“正式文档”页上的中缺少对象间接寻址运算符(->)。页面底部的一条评论说,此类运算符的优先级必须是最高的。但是,以下代码表明这不是真的,并且注释是错误的: class Foo { public $i; function __construct() { $this->i = 0; } } $foo = new Foo(); ++$foo->i; echo $foo->i; 输出: 1 那么,在前面提到的PHP操作符优先级表中,对象间接寻址操作符(->)的确切位置是什
->
)。页面底部的一条评论说,此类运算符的优先级必须是最高的。但是,以下代码表明这不是真的,并且注释是错误的:
class Foo {
public $i;
function __construct() { $this->i = 0; }
}
$foo = new Foo();
++$foo->i;
echo $foo->i;
输出:
1
那么,在前面提到的PHP操作符优先级表中,对象间接寻址操作符(
->
)的确切位置是什么?->
操作符优先级高于++
,但低于新建/克隆
。通过我的测试,它高于cli中的[(数组操作符)
,低于[
在ApachHttpD服务器中,所以我认为这是一个bug。好的->
必须比增量前的++
具有更高的优先级,否则您将尝试增量$foo
对象,而不是该对象的$I
属性……因此注释是正确的,但是为什么PHP文档没有说->I更高的优先级为什么会从表中被忽略?在C++中,唯一的优先级较高的操作符是PHP中存在的。因此,注释可能仍然是错误的。也许因为PHP文档是错误的,或者可能是他们认为它是显而易见的,所以不需要记录这样的内容。详细程度好,也许这就是原因。谢谢。我的php版本是5.6,使用windows