Heim >Backend-Entwicklung >PHP-Tutorial >PHP的魔法方法

PHP的魔法方法

WBOY
WBOYOriginal
2016-06-23 13:19:51720Durchsuche

PHP将所有以__(两个下划线)开头的类方法保留为魔术方法。所以在定义方法是,除了魔术方法,建议不要用两个下划线前缀。

魔术方法(Magic methods)有 __construct(),__destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakeup(),__toString(),__invoke(),__set_state(),__clone()和__debugInfo()等方法。

那么接下来讲讲__sleep()和__wakeup()的区别:

语法:

1 public array __sleep(void)2 3 void __wakeup(void)

serialize() 函数会检查类中是否存在一个魔术方法__sleep()。如果存在,该方法回被调用,然后才执行序列化操作。此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。如果该方法未返回任何内容,则NULL被序列化,并产生一个E_NOTICE级别的错误。

__sleep()方法常用于提交未提交的数据,活类似的清理操作。同时,如果有一些很大的对象,但不需要全部保存,这个功能就很好用。

与之相反,unserialize()会检查是否存在一个__wakeup()方法。如果存在,则会先调用__wakeup方法,预先准备对象需要的资源。

__wakeup()经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。

 1 <?php 2 class Connection{ 3 protected $link; 4 private $server,$username,$password,$db; 5 public function __construct($server,$username,$password,$db) 6 { 7 $this->server=$server; 8 $this->username=$username; 9 $this->password=$password;10 $this->db=$db;11 $this->connect();12 }13 private function connect(){14 $this->link=mysql_connect($this->server,$this->username,$this->password);15 mysql_select_db($this->db,$this->link);16 }17 public function __sleep(){18 return array('server','username','password','db');19 }20 public function __wakeup(){21 $this->connect();22 }23 }

 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn