__isset()
未宣言変数をisset()しようとしたときに動くメソッド。
__unset()
未宣言変数をunset()しようとしたときに動くメソッド。
以下、サンプルコード。
「__set()」と「__get()」について
IsUnSet
class Property{
public $food;
//未宣言変数にアクセスされた時用の配列
private $drink = array();
//未宣言変数に値をセットしようとしたら、ここが動く。
public function __set($key, $value){
echo "__set()なう\n";
//連想配列に値をセット。
$this->drink[$key] = $value;
}
//未宣言変数を取得しようとしたら、ここが動く。
public function __get($key){
echo "__get()なう\n";
//連想配列から$keyに対応する値をreturnする。
return $this->drink[$key];
}
//未宣言変数をissetしようとしたら、ここが動く。
public function __isset($key){
echo "__isset()なう\n";
//連想配列から値を取り出しisset。
return isset($this->drink[$key]);
}
//未宣言変数をunsetしようとしたら、ここが動く。
public function __unset($key){
echo "__unset()なう\n";
//連想配列から値を取り出しunset。
unset($this->drink[$key]);
}
////////////////////////////////////////////////////////
$pro = new PropertySample();
$pro->food = "ごはん";
$pro->tea = "お茶"; //__set()が動く
//$pro->foodはあるので → true
var_dump(isset($pro->food));
//$pro->teaはないので、__isset()が呼ばれる → true
var_dump(isset($pro->tea));
//$pro->coffeeはないので、__isset()が呼ばれるが、
//連想配列にも存在しないので → false
var_dump(isset($pro->coffee));
//$pro->foodはあるので普通に初期化 → null
unset($pro->food);
var_dump($pro->food);
//$pro->foodはないので、__unset()が呼ばれ初期化 → null
unset($pro->tea);
var_dump($pro->tea);
}