10
class a {
   function __get($property){...}
}

$obj = new a();
var_dump(isset($obj->newproperty));

答えはノーだと思われますが、なぜですか?

4

5 に答える 5

19

__getを使用して取得するのではなく、 __issetをチェックするためです。

何が空であるかについての標準がないため、__issetを呼び出す方がはるかに優れたオプションです。たぶん、クラスnullのコンテキストでは、許容可能な値です。また、メンバーが存在しない場合は、新しい空のオブジェクトを返すクラスを作成することもできますisset($myObj->item)。この場合、その場合は常にtrueが返されます。

于 2010-02-21T18:50:54.157 に答える
2

そうではありません。代わりに__issetを使用できます。これはここに配置されています。

于 2010-02-21T18:53:13.293 に答える
1

いいえ、__getプロパティが設定されているかどうかを判断しようとしているときにトリガーしないでください。プロパティが設定されているかどうかをテストすることは、その値を取得しようとすることと同じではありません。

を使用すると、魔法のメソッドissetがトリガーされます。__isset

見る :

于 2010-02-21T18:51:54.347 に答える
0

魔法の関数__getは、存在しないプロパティにアクセスしようとしたときにのみ呼び出されます。プロパティが存在するかどうかを確認することは、プロパティを取得することと同じではありません。

于 2010-02-21T18:50:33.690 に答える
0
Class A{
   public function __get($key){
      ...
   }
   public function __set($key,$name){
      ...
   }
   public function __unset($key){
      ...
   }
   public function __isset($key){
      ...
   }
}
$obj = new A();
$get = $obj->newproperty;//$obj->__get("newproperty")
$obj->newproperty = "X";//$obj->__set("newproperty","X")
$bool = isset($obj->newproperty);//$obj->__isset("newproperty")
unset($obj->newproperty);//$obj->__unset("newproperty")
于 2013-02-23T10:01:02.193 に答える