PHPのマジックメソッドのメモ
マジックメソッド
マジックメソッドとは特定の状況で自動的に呼び出される__
が頭についた関数です。 マジックメソッドは必ずpubulicで定義する必要があります。
contruct(),destruct()
__contruct()
はインスタンス生成時に実行されます。 __destruct()
はプロセスの終了やunsetでインスタンスが破棄された場合に実行されます。
__toString()
オブジェクトを文字列にキャストした場合に呼びだされる。 自動キャストの場合も呼ばれる。
<?php class MyClass { public function __toString() { return 'this class is ' . __CLASS__; } }
実行する。
<?php require_once 'MyClass.php'; $my_class = new MyClass(); echo $my_class; // this class is MyClass
get()・set()
アクセスできないプロパティにアクセスした場合に呼び出されます。
<?php class MyClass { public function __get($name) { echo $name . 'はアクセスできません'; } public function __set($name, $value) { echo $name . 'に' . $value . 'はアクセスできません'; } }
<?php require_once 'MyClass.php'; $my_class = new MyClass(); $my_class->hogehoge; // hogehogeはアクセスはアクセスできません $my_class->hogehoge = 'abc'; //hogehogeにabcはアクセスできません
isset(),unset()
アクセスできないプロパティにisset、unsetした場合に呼び出されます。
<?php class MyClass { public function __isset($value) { echo $value .'はアクセスできません'; } public function __unset($value) { echo $value .'はアクセスできません'; } }
<?php require_once 'MyClass.php'; $my_class = new MyClass(); isset($my_class->hogehoge); // hogehogeはアクセスできません unset($my_class->hogehoge);// hogehogeはアクセスできません
call()、callStatic()
存在しないメソッドを呼んだ場合に実行されます
<?php class MyClass { public function __call($value,$arg) { echo $value .'は存在しません'; } public static function __callStatic($value,$arg) { echo $value .'は存在しません'; } }
<?php require_once 'MyClass.php'; $my_class = new MyClass(); $my_class->hogehoge(); // hogehogeは存在しません $my_class::hogehoge();// hogehogeは存在しません
__invoke()
クラスを関数のようにつかえる。
<?php class MyClass { public function __invoke($value) { echo $value . 'です。'; } }
<?php require_once 'MyClass.php'; $my_class = new MyClass(); $my_class('invoke');// invokeです。
その他
sleep()・wakeup()・・・シリアライズ、アンシリアライズしたタイミングで呼ばれます。 clone()・・・インスタンスをcloneした場合に呼ばれます。 set_state() ・・・ var_export() した文字列から復元するためstaticメソッド