PHP 的 __get 和 __set 魔術方法何時實際被呼叫?

Mary-Kate Olsen
發布: 2024-11-16 15:34:02
原創
174 人瀏覽過

When Do PHP's __get and __set Magic Methods Actually Get Called?

PHP __get 和__set 魔術方法:了解調用和限制

PHP 中的__get 和__set 魔術方法旨在處理對象屬性存取當屬性不可公開存取時進行修改。但是,關於它們的行為可能會出現一些誤解。

不可存取的屬性

當屬性或方法無法存取時,會呼叫 __get 和 __set。在提供的範例中,$bar 是公共屬性,預設可以存取。因此,魔法方法不會被觸發。

Getter 和 Setter 替代

魔法方法並不是要取代 getter 和 setter。它們提供了處理不可存取屬性的後備機制。它們主要是為錯誤處理而設計的,不應僅依賴屬性存取和修改。

效能注意事項

使用魔法方法可能會導致執行速度較慢使用明確的 getter、setter 或直接屬性存取。這是因為魔法方法涉及額外的方法呼叫和物件導向的自省。

範例修改

為了說明魔法方法的正確用法,我們將範例修改為使用私有屬性:

class foo {

    private $bar;
    public function __get($name) {

        echo "Get:$name";
        return $this->$name;
    }

    public function __set($name, $value) {

        echo "Set:$name to $value";
        $this->$name = $value;
    }
}

$foo = new foo();
echo $foo->bar; // Invokes __get()
$foo->bar = 'test'; // Invokes __set()
echo "[$foo->bar]"; // Outputs [test]
登入後複製

在此範例中,$bar 屬性現在是私有的,因此無法通過預設。因此,在存取和修改屬性時,可以正確呼叫 __get 和 __set 方法。

以上是PHP 的 __get 和 __set 魔術方法何時實際被呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板