PHP基础(魔术方法)
__construct():构造函数,方法名与类名相同也为构造函数。
<?php class Magic { public $name = ''; function __construct() { $this->name = '__construct'; echo $this->name; } } $magic = new Magic();//输出 __construct ?>
__desctruct():析构函数,所有对象引用被删除或者对象被销毁后执行,即使在exit()/die()后也会执行。
<?php class Magic { public $name = ''; function __construct() { $this->name = '__construct'; echo $this->name; exit(); } function __destruct() { $this->name = '__destruct'; echo $this->name; } } $magic = new Magic();//输出 __construct__destruct ?>
__call() && __callStatic():当调用对象中某种不存在的方法时,__call()或__clallStatic()被调用。__callStatic()为静态。
<?php class Magic { public $name = ''; function __call($method,$params) { $this->name = '__call---'.$method.'---'; echo $this->name; var_dump($params); } static function __callStatic($method,$params) { $name = '__callStatic---'.$method.'---'; echo $name; var_dump($params); } } $magic = new Magic(); $magic->magic(1,2,3); //输出 __call---magic---array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } Magic::magicStatic(4,5,6); //输出 __callStatic---magicStatic---array(3) { [0]=> int(4) [1]=> int(5) [2]=> int(6) } ?>
__get():访问不存在的成员时调用。
__set():设置不存在的成员时调用。
<?php class Magic { public $name = ''; function __get($value) { return 666; } function __set($key,$value) { echo $key; echo $value; } } $magic = new Magic(); $magic->a = 1; //输出 a1 $b = $magic->a + 1; echo $b; //输出 667 ?>
__isset():
__unset():
__sleep():当序列化类时首先检查类中是否包含__sleep(),按照__sleep()返回需要序列化变量名称进行序列化。
__wakeup():反序列化时首先检查是否包含__wakeup(),用于反序列化初始操作。
<?php class Magic { public $name = 'Jerry'; public $email = 'Jerry@J.com'; function __sleep() { return ['name']; } function __wakeup() { echo "---反序列化初始:"; } } $magic = new Magic(); $seria = serialize($magic); echo $seria; //输出 O:5:"Magic":1:{s:4:"name";s:5:"Jerry";} var_dump(unserialize($seria)); //输出 ---反序列化初始:object(Magic)#2 (2) { ["name"]=> string(5) "Jerry" ["email"]=> string(11) "Jerry@J.com" } ?>
__toString():快速字符串获取,在直接输出对象时被调用
<?php class Magic { public $name = 'Jerry'; public $email = 'Jerry@J.com'; function __toString() { return $this->name; } } $magic = new Magic(); echo $magic; //输出 Jerry ?>
__clone():当执行对象clone时会被执行。
<?php class Magic { function __clone() { echo "Magic对象被Clone"; } } $magic = new Magic(); $magicClone = clone $magic; //输出 Magic对象被Clone ?>