私は、PHP の OO システムとちょっとした癖にやや慣れていません。私が読んだことから、「アクセス可能」ではないフィールドにアクセスすると、 __get および __set メソッドが呼び出されます。したがって、明らかに、クラス内の public フィールドまたは protected フィールドにアクセスしても、これらの関数は呼び出されません。しかし、$obj->a にアクセスしようとして、a が以前に定義されたことがない場合はどうなるでしょうか? 私は当初、これが __get または __set を呼び出すと思っていましたが、そうではないようです。これを解決するには、動的に作成されたすべてのフィールドをデータ配列に入れることです。
したがって、$obj->a はパブリック フィールドですか? どうもありがとうございました!
例
class Example
{
public function __get($field)
{
echo 'Getting ' . $field;
return $this->$field;
}
public function __set($field, $value)
{
echo 'Setting ' . $field . ' to ' . $value;
$this->$field = $value;
}
}
$obj = new Example;
$obj->randomField = 1; //here randomField is set to 1 but the echo statement is not printed out in __set
echo $obj->randomField; //here, 1 will be echoed but not the statement in __get
//is randomField a public field?