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