首頁 >後端開發 >php教程 >為什麼 PHP 中沒有呼叫我的 __get 和 __set 魔術方法?

為什麼 PHP 中沒有呼叫我的 __get 和 __set 魔術方法?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-15 04:47:021023瀏覽

Why aren't my __get and __set magic methods being invoked in PHP?

重載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中文網其他相關文章!

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