PHPのマジックメソッドのまとめと使用例

4735 ワード

マジックメソッドはPHPがオブジェクトに向いている特有の特性です.これらは特定の状況でトリガーされ、二重下線で始まるので、フックとして理解することができ、モードメソッドを使用してPHPオブジェクト向けのリロードを簡単に実現することができます(Overloadingはクラス属性とメソッドを動的に作成します).マジックメソッドの多くはペアで現れ、現在のPHPのすべてのモードメソッドを以下に示す.
1.__construct,__destruct
__constuctがオブジェクトを構築するときに呼び出されます;_destructは、オブジェクトの破棄またはスクリプトの終了時に呼び出されることを明確にします.
2.__get,__set
__setアクセス不可または存在しない属性に値を割り当てると呼び出される_getアクセス不可または属性が存在しない場合に呼び出されます
3.__isset,__unset
__issetは、アクセス不可能または存在しない属性に対してisset()またはempty()を呼び出すときに呼び出される_unsetアクセス不可または存在しない属性をunsetするときに呼び出される
4.__call,__callStatic
__callがアクセス不可または存在しないメソッドを呼び出すと呼び出されます_callStatic呼び出しアクセス不可または存在しない静的メソッドが呼び出された場合
5.__sleep,__wakeup
__sleepはserializeを使用するときに呼び出され、大きなオブジェクトのすべてのデータを保存する必要がない場合に役立ちます.wakeup unserializeを使用すると呼び出され、オブジェクトの初期化操作に使用できます.
6.__clone
オブジェクトcloneを行うときに呼び出され、オブジェクトのクローン動作を調整します.
7.__toString
クラスが文字列に変換されると呼び出されます
8.__invoke
関数でオブジェクトを呼び出すと呼び出されます
9.__set_state
var_を呼び出すとexport()がクラスをエクスポートすると、この静的メソッドが呼び出されます.で_set_stateの戻り値をvar_とするexportの戻り値.
10.__debuginfo
var_を呼び出すとdump()オブジェクトを印刷するときに呼び出される(すべてのプロパティを印刷したくない場合)PHP 5に適用されます.バージョン6
PHPマジックの使用例は以下の通りである.

var = 'test after wakeup';
  }
 
  //               
  public function __toString()
  {
    return '__toString called'.PHP_EOL;
  }
 
  //    clone    ,           
  public function __clone()
  {
    echo '__clone called'.PHP_EOL;
  }
 
  //              
  public function __invoke()
  {
    echo '__invoke called'.PHP_EOL;
  }
 
  //   var_export()    ,        。 __set_state      var_export    。
  public static function __set_state($arr)
  {
    return '__set_state called'.PHP_EOL;
  }
 
  //   var_dump()        (          )   PHP5.6  
  public function __debuginfo($arr)
  {
    echo '__debuginfo called'.PHP_EOL;
    return array(
      'var' => 'test fro __debuginfo'
    );
  }
}
 
$m = new Magic(); //__construct()   
$m->not_exist_property = test; //__set()   
echo $m->not_exist_property;//__get()   
$m->abc(1,2,3); //__call()   
echo isset($m->not_exist_property); //__isset()   ,  bool 
unset($m->not_exist_property); //__unset()   
echo $tmp = serialize($m); //__sleep()   
unserialize($tmp); //__wakeup()   
$m1 = clone $m; //__clone()   ,         ,  clone           
$m(); //__invoke()
eval( '$m2 = ' . var_export ( $m , true ) . ';' );var_dump($m2);
var_dump($m);
//  __destruct()   
 
/*
  :
__construct called
not_exist_property-test__set called
not_exist_property__get called
abc-1,2,3__call called
not_exist_property__isset called
1not_exist_property__unset called
__sleep called
O:5:"Magic":1:{s:13:"var1111111111";N;}__wakeup called
__destruct called
__clone called
__invoke called
string(20) "__set_state called
"
class Magic#1 (1) {
 public $var =>
 string(4) "test"
}
__destruct called
__destruct called
 
 
*/