__get と __set は本当に PHP のゲッターとセッターをオーバーロードしているだけなのでしょうか?

Barbara Streisand
リリース: 2024-11-12 14:34:02
オリジナル
691 人が閲覧しました

Are __get and __set Really Just Overloading Getters and Setters in PHP?

マジック メソッド: PHP の __get および __set の真の目的を明らかにする

PHP の謎めいた __get および __set マジック メソッドは開発者の興味をそそります。意図された機能について疑問を抱いたままになります。最近まで、これらのメソッドを使用するとゲッターとセッターを簡単にオーバーロードできると考えられていました。しかし、現実は異なる状況を描いています。

マジック メソッドの真の役割を理解する

一般的な想定に反して、__get と __set は主にダイレクト メソッドが使用できない状況を処理するように設計されています。または、アクセシビリティ制限のため、プロパティへのアクセスが制限されています。具体的には:

  • __set は、アクセスできないプロパティに書き込もうとするときに呼び出されます。
  • __get は、アクセスできないプロパティからデータを読み取るときに利用されます。

次のコード スニペットを考えてみましょう:

class foo {
    public $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; // Fails
$foo->bar = 'test'; // Fails
ログイン後にコピー

この場合、$bar プロパティはパブリックにアクセスできるため、__get メソッドと __set メソッドは呼び出されません。 PHP マニュアルには、「マジック メソッドはゲッターやセッターの代わりではありません。これらは、エラーが発生するメソッド呼び出しやプロパティ アクセスの処理を可能にするだけです。」

パフォーマンスへの影響

マジック メソッドにはパフォーマンスのコストが伴うことに注意することが重要です。これらの呼び出しは、適切なゲッター、セッター、または直接メソッド呼び出しを使用するよりも著しく遅くなります。したがって、これらは、アクセシビリティの問題の処理が必要な例外的な状況のために予約されている必要があります。

結論

__get と __set はゲッターとセッターのオーバーロードにとって便利な解決策のように思えるかもしれません。 、その真の目的は、プロパティへのアクセス制限を管理することにあります。効果的な PHP コード開発には、それらの役割を正確に理解することが重要です。この知識を活用することで、不必要なパフォーマンスの低下を回避し、コードの安定性を確保できます。

以上が__get と __set は本当に PHP のゲッターとセッターをオーバーロードしているだけなのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート