[英]PHP object Operator Precedence (->)
我寫一些代碼:
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遷移文檔。 我知道您在談論PHP5,但是由於PHP5和PHP7之間的行為已發生更改,因此遷移文檔中對此有所注意。
為了回答您的問題,PHP5中將$foo->{$bar['baz']}
$foo->$bar['baz']
解釋為$foo->{$bar['baz']}
。 這意味着您的代碼應該拋出錯誤,因為它試圖在使用$b='b';
訪問$b['f']
$b='b';
作為$b
的定義。
但是,在PHP7中,它解釋為($foo->$bar)['baz']
,因此在這里它應該可以按您期望的那樣工作。
您確定您的CLI不使用PHP7嗎?
您的代碼幾乎正確-擺脫掉第二個$!
class a{
public $b=['f'=>'c'];
}
$a=new a;
$b='b';
echo $a->b['f']; // without the $ it works
$x = $a->$b; // otherwise you need to assign first
echo $x['f']; // now it works
echo $a->{$b}['f']; // or wrapped in curlies
優先權給予$。 換句話說,$ x-> $ b ['f']首先將$ b視為一個數組,因此它將查找不存在的$ b ['f'],因此會出現錯誤。 將大括號放在$ b周圍將迫使PHP首先對其進行評估,並為您提供值'b',因此它變為$ x-> b ['f']存在且有效。
回聲($ a-> $ b)['f'];呢?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.