括號改變函數呼叫結果的語意
在PHP 中,將函數呼叫的結果括在括號中啟用表達式否則會引發錯誤。如果沒有關於此行為的明確文檔,理解其工作原理可能會令人困惑。
此行為源自於 Zend 引擎的解析邏輯。當 PHP 遇到非空函數參數列表時,它會將其歸類為三種可能性之一:沒有變數的表達式、變數或透過引用傳遞的變數。
透過在函數呼叫周圍添加括號,參數不再被解釋為函數呼叫。這會變更用於編譯程式碼的操作碼,從而刪除指示函數呼叫的標誌。
此外,Zend 引擎允許在某些情況下將引用計數為 1 的非引用視為引用。在提供的範例中, get_array() 傳回的陣列的參考計數為 1,滿足此條件。
因此,括號可以防止函數呼叫被偵測到,並且傳回值被視為是計數為 1 的引用,使表達式 reset((get_array())) 能夠按預期工作。
但是,請務必注意,此行為被視為錯誤,不應依賴。 PHP 語法的 EBNF 表示形式沒有明確提及此行為,依賴它可能會導致意外結果。
以上是為什麼括號會改變 PHP 中函數呼叫的語意?的詳細內容。更多資訊請關注PHP中文網其他相關文章!