LoginSignup
0
2

More than 5 years have passed since last update.

マジックメソッド「__isset()」「__unset()」

Last updated at Posted at 2015-06-05

__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);
}
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2