首页 > 代码库 > PHP魔术方法
PHP魔术方法
__sleep:在serialize被调用时,被自动的调用
__wakeup:在unserialize别调用时,被自动的调用,可用于做对象的初始化操作
class A { public $var; //serialize时被调用,当你不需要保存大对象的所有数据时很有用 public function __sleep() { echo ‘__sleep called‘.PHP_EOL; return array(‘var‘); } //unserialize时被调用,可用于做些对象的初始化操作 public function __wakeup() { echo ‘__wakeup called‘.PHP_EOL; $this->var = ‘test after wakeup‘; } } $a = new A; var_dump(serialize($a)); var_dump(unserialize(serialize($a)));
#########################################
__sleep called
E:\wamp64\www\test\test.php:142:string ‘O:1:"A":1:{s:3:"var";N;}‘ (length=24)__sleep called __wakeup called
E:\wamp64\www\test\test.php:143: object(A)[2] public ‘var‘ => string ‘test after wakeup‘ (length=17) public ‘var1‘ => null public ‘var2‘ => null
__toString:当一个类被转换成字符串时被调用
class TestClass { public $foo; /** * 对象被转化成字符串输出 * 一个类被当成字符串时应怎样回应 * @return mixed */ public function __toString() { return "toString called"; } } echo new TestClass();
__construct:构造函数的类会在每次创建新对象时先调用此方法,一般用于动态注入属性。如果子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继承
__destruct:析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。和构造函数一样,父类的析构函数不会被引擎暗中调用。要执行父类的析构函数,必须在子类的析构函数体中显式调用 parent::__destruct()。此外也和构造函数一样,子类如果自己没有定义析构函数则会继承父类的。
class MyDestructableClass { function __construct() { print "In constructor\n"; $this->name = "MyDestructableClass"; } function __destruct() { print "Destroying " . $this->name . "\n"; } } $obj = new MyDestructableClass();
PHP魔术方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。