[问答题]__sleep()

Posted 痞子水

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[问答题]__sleep()相关的知识,希望对你有一定的参考价值。

serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。

 

_sleep()和__wakeup()的用法

(2008-09-08 21:41:52)

标签:

杂谈

 

    函数名__construct, __destruct (注意构造函数和析构函数), __call, __get, __set, __isset, __unset (注意重载), __sleep, __wakeup, __toString, __set_state, __clone and __autoload是PHP类里边的魔法函数.

 

    在任何类里你不能用这些名字给函数命名除非你想与它们的魔术功能性相关联。
    注意: php储量将所有用__开始的函数名作为魔术函数。推荐地,在PHP里不能用__做函数名除非你想用文件证明是魔术函数。


__sleep()和__wakeup()


serialize() 检查类中是否有魔术名称 __sleep 的函数。如果这样,该函数将在任何序列化之前运行。它可以清除对象并应该返回一个包含有该对象中应被序列化的所有变量名的数组。
使用 __sleep 的目的是关闭对象可能具有的任何数据库连接,提交等待中的数据或进行类似的清除任务。此外,如果有非常大的对象而并不需要完全储存下来时此函数也很有用。
相反地,unserialize() 检查具有魔术名称 __wakeup 的函数的存在。如果存在,此函数可以重建对象可能具有的任何资源。
使用 __wakeup 的目的是重建在序列化中可能丢失的任何数据库连接以及处理其它重新初始化的任务。

例子 Sleep and wakeup

PHP代码如下:

<?php
class Connection 
{   protected $link;
    
private $server$username$password$db;
    
public function __construct($server$username$password$db)
    {   
$this->server $server;
        
$this->username $username;
        
$this->password $password;
        
$this->db $db;
        
$this->connect();
    }
    
private function connect()
    {   
$this->link mysql_connect($this->server$this->username$this->password);
        
mysql_select_db($this->db$this->link);
    }
    
public function __sleep() {   mysql_close($this->link);   }
    
public function __wakeup() {   $this->connect();   }
}
?>

以上是关于[问答题]__sleep()的主要内容,如果未能解决你的问题,请参考以下文章

[AndroidStudio]_[初级]_[配置自动完成的代码片段]

VSCode 配置 用户自定义代码片段 自定义自动代码补充

[AndroidStudio]_[初级]_[配置自动完成的代码片段]

[AndroidStudio]_[初级]_[配置自动完成的代码片段]

这些 C++ 代码片段有啥作用?

软测问答记录_036