ホームページ  >  記事  >  バックエンド開発  >  PHP の __get および __set マジック メソッドが実際に呼び出されるのはいつですか?

PHP の __get および __set マジック メソッドが実際に呼び出されるのはいつですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-16 15:34:02175ブラウズ

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

PHP __get および __set マジック メソッド: 呼び出しと制限について

PHP の __get および __set マジック メソッドは、オブジェクト プロパティ アクセスを処理するように設計されています。プロパティが公開されていない場合の変更。ただし、それらの動作に関していくつかの誤解が生じる可能性があります。

アクセスできないプロパティ

__get および __set は、プロパティまたはメソッドにアクセスできない場合に呼び出されます。この例では、$bar はパブリック プロパティであり、デフォルトでアクセス可能です。したがって、マジック メソッドはトリガーされません。

Getter and Setter Substitute

マジック メソッドは、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。