重載Getter 和Setter:了解__get 和__set 魔術方法
PHP 中的__get 和__set 魔術方法旨在提供替代方法傳統的getter 和setter。透過重寫這些方法,開發人員可以自訂屬性存取和修改的行為。但是,如提供的程式碼範例中所示,這些方法沒有按預期呼叫。
問題:魔術方法與公共屬性
聲明屬性時public,它們被認為是可存取的,且 PHP 不會呼叫 __get 和 __set 方法。在這個特定實例中, $bar 屬性被宣告為公共,使得魔術方法變得多餘。
使用魔術方法進行屬性重載
正如PHP 手冊中提到的, __get用於處理從不可訪問的屬性讀取數據,而__set 用於將資料寫入不可存取的屬性。如果 $bar 屬性被定義為私有或受保護,則 __get 和 __set 方法將會介入。
效能影響
需要注意的是,魔術方法是比常規 getter、setter 和直接方法呼叫慢得多。因此,應明智地針對特定用例使用它們,例如錯誤處理或提供動態屬性存取。
結論
PHP 中的 __get 和 __set 魔術方法有特定目的,並且僅應在必要時使用,並了解所涉及的性能權衡。在屬性可存取的情況下(如提供的範例所示),使用標準屬性存取和修改技術會更有效。
以上是為什麼 PHP 中沒有呼叫我的 __get 和 __set 魔術方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!