為什麼 PHP 屬性不能用函數?
在 PHP 中,屬性預設值不能包含函數調用,這項限制可能會引發問題關於其實作。本文深入探討了這種設計選擇的技術基礎。
基本原理
編譯器程式碼顯示此限制是有意為之,但原因尚未公開。檢查編譯過程可以提供一些見解。
編譯過程
解析類別變數宣告時,編譯器遵循特定的語法。賦值必須遵守靜態標量定義。這些定義中的陣列也必須包含靜態標量。
如果語法允許非靜態數組,則程式碼將通過語法檢查。但是,這會在早期綁定階段導致「無效綁定類型」編譯錯誤,從而確保目前數組上的最後一個操作碼與特定類型相符。
有問題的操作碼
分配非靜態數組時,編譯器會產生額外的操作碼,例如 INIT_ARRAY 和 DO_FCALL。這些操作碼會導致早期綁定期間不匹配,從而觸發錯誤。
可能的解決方案和實施挑戰
其他動態語言可以處理此類情況。 PHP 的潛在解決方案包括:
實現這些解決方案需要仔細考慮並對編譯器進行重大更改。
結論
無法在 PHP 屬性中使用函數源自 PHP 中的設計決策編譯過程。雖然這看起來像是一個限制,但它似乎是語言設計者有意識的選擇。實施替代解決方案需要對編譯過程進行重大重組,這可能不被視為優先事項。
以上是為什麼PHP屬性不能支援函數呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!