首頁  >  文章  >  後端開發  >  為什麼括號會改變 PHP 中函數呼叫的語意?

為什麼括號會改變 PHP 中函數呼叫的語意?

Barbara Streisand
Barbara Streisand原創
2024-10-28 20:03:02894瀏覽

 Why do Parentheses Change the Semantics of Function Calls in PHP?

括號改變函數呼叫結果的語意

在PHP 中,將函數呼叫的結果括在括號中啟用表達式否則會引發錯誤。如果沒有關於此行為的明確文檔,理解其工作原理可能會令人困惑。

此行為源自於 Zend 引擎的解析邏輯。當 PHP 遇到非空函數參數列表時,它會將其歸類為三種可能性之一:沒有變數的表達式、變數或透過引用傳遞的變數。

透過在函數呼叫周圍添加括號,參數不再被解釋為函數呼叫。這會變更用於編譯程式碼的操作碼,從而刪除指示函數呼叫的標誌。

此外,Zend 引擎允許在某些情況下將引用計數為 1 的非引用視為引用。在提供的範例中, get_array() 傳回的陣列的參考計數為 1,滿足此條件。

因此,括號可以防止函數呼叫被偵測到,並且傳回值被視為是計數為 1 的引用,使表達式 reset((get_array())) 能夠按預期工作。

但是,請務必注意,此行為被視為錯誤,不應依賴。 PHP 語法的 EBNF 表示形式沒有明確提及此行為,依賴它可能會導致意外結果。

以上是為什麼括號會改變 PHP 中函數呼叫的語意?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn