[问答题]__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();   }

}
?>

时间: 2025-01-03 19:11:23

[问答题]__sleep()的相关文章

PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep

PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone and __autoload 1.__get.__set这两个方法是为在类和他们的父类中没有声明的属性而设计的__get( $property ) 当调用一个未定义的属性时访问此方法__set( $proper

PHP中的魔术方法:__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone and __autoload

1.__get.__set 这两个方法是为在类和他们的父类中没有声明的属性而设计的: __get( $property ) 当调用一个未定义的属性时访问此方法: __set( $property, $value ) 给一个未定义的属性赋值时调用: 这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性). 2.__isset.__unset __isset( $property ) 当在一个未定义的属性上调用isset()函数时调用此方法: _

__sleep和__wakeup

魔术方法__sleep和__wakeup 串行化serialize可以把变量包括对象,转化成连续bytes数据. 你可以将串行化后的变量存在一个文件里或在网络上传输. 然后再反串行化还原为原来的数据. 你在反串行化类的对象之前定义的类,PHP可以成功地存储其对象的属性和方法. 有时你可能需要一个对象在反串行化后立即执行. 为了这样的目的,PHP会自动寻找__sleep和__wakeup方法. 当一个对象被串行化,PHP会调用__sleep方法(如果存在的话). 在反串行化一个对象后,PHP 会调

php魔术方法__sleep() 和 __wakeup()

魔术方法的使用 <?php class Connection  {     protected $link;     private $server, $username, $password, $db;          public function __construct($server, $username, $password, $db)     {         $this->server = $server;         $this->username = $user

PHP 魔术方法 __sleep __wakeup(四)

串行化serialize可以把变量包括对象,转化成连续bytes数据. 你可以将串行化后的变量存在一个文件里或在网络上传输. 然后再反串行化还原为原来的数据. 你在反串行化类的对象之前定义的类,PHP可以成功地存储其对象的属性和方法. 有时你可能需要一个对象在反串行化后立即执行. 为了这样的目的,PHP会自动寻找__sleep和__wakeup方法. 当一个对象被串行化,PHP会调用__sleep方法(如果存在的话). 在反串行化一个对象后,PHP 会调用__wakeup方法. 这两个方法都不接

魔术方法__clone(), __toString(), __call(), __autoload(), __sleep()和__wakeup()详解

一.魔术方法__clone() <?php class demo{ public $name; public $age; public function __construct($name,$age){ $this -> name = $name; $this -> age = $age; } public function say(){ echo "say".$this->name; } //在克隆对象时自动调用 //作用:可以对新对象的成员属性进行赋值 pu

阿花宝宝 Java基础笔记 之 继承相关问答题

继承问答题:1.创建对象一定会调用类里边的构造方法你知不知?         yes2.类里边能有多个构造方法你知不知道?   yes3.如果类里边有多个构造方法你会调用那个你知不知道?4.什么是子类你知不知道?5.执行子类的构造方法之前肯定会调用父类无参的构造方法你知不知道?6.怎么通过子类调用父类有参的构造方法?Student s1 = new Student(2,"张三");Student s2 = new Student(2,"张三"); if(s1==s2

phpz中的魔术方法__call、__set、__get、__sleep、__invoke、__autoload、__construct、__destruct、__clone、__tostring、__callstatic

PHP5.3新增了一个叫做__invoke的魔术方法,这样在创建实例后,可以直接调用对象. class testClass { public function __invoke { print “hello world”; } } $n = new testClass; $n(); 执行结果为: hello world. 官方示例 class CallableClass { public function __invoke($x) { var_dump($x); } } $obj = new C

Math.abs(~2018) —— 入群问答题

这道题的关键点在于对位操作符“~”的理解,以及内部的具体实现(设计到补码) 最后的结果是:2019 参考文章: http://www.w3school.com.cn/js/pro_js_operators_bitwise.asp http://baike.baidu.com/link?url=vjQq5-83gWDTDHomD1zSKNbgtVbH9-_mBASxaMWXzoYIsOlAzgx6Lew51WLgsPAK5SohLVrmpfKmlZbwMDzx1_#reference-[1]-37