class a {
function __get($property){...}
}
$obj = new a();
var_dump(isset($obj->newproperty));
答えはノーだと思われますが、なぜですか?
__getを使用して取得するのではなく、 __issetをチェックするためです。
何が空であるかについての標準がないため、__issetを呼び出す方がはるかに優れたオプションです。たぶん、クラスnullのコンテキストでは、許容可能な値です。また、メンバーが存在しない場合は、新しい空のオブジェクトを返すクラスを作成することもできますisset($myObj->item)
。この場合、その場合は常にtrueが返されます。
そうではありません。代わりに__issetを使用できます。これはここに配置されています。
魔法の関数__getは、存在しないプロパティにアクセスしようとしたときにのみ呼び出されます。プロパティが存在するかどうかを確認することは、プロパティを取得することと同じではありません。
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")