次のコードがあるとします。
class SomeClass{
private $somePrivateField;
public function __get($name){
$function = "get".ucfirst($name);
return $function;
}
public function __set($name,$value){
$function = "set".ucfirst($name);
return $function($value);
}
public function __call($name, $arguments) {
//if function being called is getSomething
//getThat private/protected field if exists and return
//if not raise exception
// similar for setSomething...
}
}
これは、いくつかのチュートリアルからの一節です。
__get() メソッドは、設定されるプロパティの名前を表す引数を受け入れます。$obj->property の場合、引数はプロパティになります。
次に、__get() メソッドはこれを getProperty に変換します。これは、__call() メソッドで定義したパターンと一致します。これが意味することは、$obj->property は最初に同じ名前のパブリック プロパティを設定しようとし、次に __get() に移動し、次にパブリック メソッド setProperty() の呼び出しを試み、次に __call() に移動し、最後に保護された $_property を設定します。
だから、コードのどこかで言うと
$obj->property
最初に public フィールドにアクセスしようとしたことは理解できます.なぜ最初に __get() に行くのですか? なぜ __set() ではないのですか? では、なぜ __set() に行くのでしょうか?
誰か説明してくれませんか?ありがとう...