1

私は、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?
4

1 に答える 1

3
$obj = new Example;
$obj->randomField = 1; // here __set method is called
echo $obj->randomField; // here __get method won't be called because `$obj->randomField` exists.

//is randomField a public field?
// Yes, after you set it, it became a public field of the object.
于 2012-06-08T02:38:10.343 に答える