Home >Backend Development >PHP Tutorial >Summary of magic method examples in PHP object-oriented
Magic method is a unique feature of PHP object-oriented. They are triggered under specific circumstances and all start with a double underscore. You can understand them as hooks. Using pattern methods, you can easily implement overloading in PHP object-oriented (Overloading means dynamically creating class attributes and method). Many magic methods appear in pairs. The following lists all the current pattern methods in PHP.
1.construct, destruct
constuct is called when constructing the object;
destruct is called when the object is explicitly destroyed or the script ends;
2.get, set
set is called when assigning a value to an inaccessible or non-existent property
get is called when reading an inaccessible or non-existent property
3.isset, unset
isset is called when isset() or empty() is called on an inaccessible or non-existent property
unset is called on an inaccessible or non-existent property Called when a non-existing property is unset
4.call, callStatic
call is called when an inaccessible or non-existent method is called
callStatic cannot be called
5.sleep is called when accessing or non-existing static methods, wakeup
sleep is called when using serialize, when you don't need to save all of the large object It is useful for data
wakeup is called when using unserialize and can be used to do some object initialization operations
6.clone
It is called when cloning an object , used to adjust the cloning behavior of objects
7.toString
Called when a class is converted to a string
8 .invoke
Called when an object is called functionally
9.set_state
When var_export() is called to export a class, This static method is called. Use the return value of set_state as the return value of var_export.
10.debuginfo
Called when var_dump() is called to print an object (when you don’t want to print all attributes) Applicable to PHP5.6 version
PHP magic method usage examples are as follows:
<?php class Magic { public $var = 'test'; //构造函数,在创建对象的时候调用 public function construct() { echo 'construct called'.PHP_EOL; } //某个对象的引用都被删除、对象被销毁、调用exit()后、脚本关闭时被调用 public function destruct() { echo 'destruct called'.PHP_EOL; } //当给不可访问或不存在属性赋值时被调用 public function set($name, $value) { echo $name.'-'.$value; echo 'set called'.PHP_EOL; } //读取不可访问或不存在属性时被调用 public function get($name) { echo $name; echo 'get called'.PHP_EOL; } //调用不可访问或不存在的方法时被调用 public function call($name, $arguments) { echo $name . '-' . implode(',', $arguments); echo 'call called'.PHP_EOL; } //调用不可访问或不存在的静态方法时被调用 public static function callStatic($name, $arguments) { echo $name . '-' . implode(',', $arguments); echo 'callStatic called'.PHP_EOL; } //对不可访问或不存在的属性调用isset()或empty()时被调用 public function isset($name) { echo $name; echo 'isset called'.PHP_EOL; return true; } //对不可访问或不存在的属性进行unset时被调用 public function unset($name) { echo $name; echo 'unset called'.PHP_EOL; } //serialize时被调用,当你不需要保存大对象的所有数据时很有用 public function sleep() { echo 'sleep called'.PHP_EOL; return array('var1111111111'); } //unserialize时被调用,可用于做些对象的初始化操作 public function wakeup() { echo 'wakeup called'.PHP_EOL; $this->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-testset called not_exist_propertyget called abc-1,2,3call called not_exist_propertyisset called 1not_exist_propertyunset 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 */
The above is the detailed content of Summary of magic method examples in PHP object-oriented. For more information, please follow other related articles on the PHP Chinese website!