簡體   English   中英

PHP對象運算符優先級(->)

[英]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

看到這里https://3v4l.org/gZJWt

優先權給予$。 換句話說,$ x-> $ b ['f']首先將$ b視為一個數組,因此它將查找不存在的$ b ['f'],因此會出現錯誤。 將大括號放在$ b周圍將迫使PHP首先對其進行評估,並為您提供值'b',因此它變為$ x-> b ['f']存在且有效。

回聲($ a-> $ b)['f'];呢?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM