php经典实例-笔记2
来源:互联网 发布:怎么在淘宝刷好评赚钱 编辑:程序博客网 时间:2024/05/22 00:55
1、串行化
方法:serialize()、unserialize()
这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 unserialize() 恢复对象时, 将调用__wakeup() 成员函数。这样就使得对象能够重新建立起序列化时未能保留的各种状态。
当把序列化的数据放在url中在页面之间传递时,需要对这些数据调用urlecode(),以确保对其中的url元字符进行处理。
串行化接口或序列化接口:serializable
实现此接口的类将不再支持__sleep()和__wakeup()。不论何时,只要有实例需要被序列化,serialize方法都将被调用,它将不会调用 __destruct() 或有其他方法,除非程序化地调用此方法。当数据被反序列化时,类将被感知并且调用合适的 unserialize() 方法而不是调用 __construct()。如果需要执行标准的构造器,你应该在这个方法中进行处理。
自定义的序列化接口需要实现序列化接口的serialize()和unserialize()方法。
class obj implements Serializable { private $data; public function __construct() { $this->data = "My private data"; } public function serialize() { return serialize($this->data); } public function unserialize($data) { $this->data = unserialize($data); } public function getData() { return $this->data; } } $obj = new obj; $ser = serialize($obj); print $ser."<br>"; //C:3:"obj":23:{s:15:"My private data";} $newobj = unserialize($ser); var_dump($newobj->getData()); //My private data
2、魔术方法
__construct(),__destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakeup(),__toString(),__invoke(),__set_state()和 __clone() 。
这些方法被称为"魔术方法。在命名自己的类方法时不能使用这些方法名,除非是想使用其魔术功能。
(1)__sleep()和__wakeup()
__sleep()常用于提交未提交的数据,或者类似的清理操作。serialize()函数会首先检查类中是否存在__sleep(),存在的话,就先调用这个方法。它的功能就是清理对象,并返回一个包含对象中所有应该被序列化的变量名称的数组。如果此方法未返回任何内容,则null被序列化。
__wakeup()是预先准备需要的资源,例如重新建立数据库连接,或者其他的初始化操作。早unserialize()时会检测是否存在__wakeup(),有则先调用它。
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() { return array('server', 'username', 'password', 'db'); } public function __wakeup() { $this->connect(); }}
(2)__toString()
用于一个类被当成字符串时应该怎样回应。 此方法必须返回一个字符串,否则或报E_RECOVERABLE_ERROR
级别的致命错误。
3、print_r() 和var_dump()
可以捕获它们的输出结果。
print_r():将第二个参数设置我true,则不打印结果,而是返回输出。
var_dump():不支持这种操作,需要使用到输出控制函数。
$a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x','y','z')); ob_start(); var_dump($a); $temp = ob_get_contents(); ob_end_clean(); print $temp;
print_r()也可以这么操作,但没必要。
4、输出控制函数(1)ob_start():打开输出控制缓冲。当输出缓冲是活跃的时候,没有输出能从脚本送出(除http标头外),而是被存储在内部缓冲区中。输出缓冲区是可堆叠的,这即意谓着,当有一个 ob_start() 是活跃的时, 你可以调用另一个 ob_start() 。但是必须注意缓存区的顺序关闭和数据的顺序读取。
(2)ob_clean():清空(擦掉)输出缓冲区。只是清除掉缓存区的内容,并没有销毁缓存区。
(3)ob_end_clean():清空(擦除)缓冲区并关闭输出缓冲。清除缓存区内容,并销毁缓存区。
(4)ob_get_contents():返回输出缓冲区的内容,但是不会清除内容。
(5)ob_get_clean():得到当前缓冲区的内容并删除当前输出缓冲区。
(6)ob_flush():冲刷出(送出)输出缓冲区中的内容。此函数不会销毁输出缓冲区。
(7)ob_end_flush():冲刷出(送出)输出缓冲区内容并关闭缓冲。此函数同时会销毁输出缓冲区。
(8)ob_get_flush():刷出(送出)缓冲区内容,以字符串形式返回内容,并关闭输出缓冲区。
(9)ob_get_length():返回输出缓冲区内容的长度。
- php经典实例-笔记2
- php经典实例-笔记1
- php经典实例-笔记4-数据库
- php经典实例-笔记6-xml
- PHP经典实例学习笔记--数组
- php经典实例-笔记3-类与函数篇
- php经典实例-笔记3-web与表单
- php经典实例-笔记5-国际化和本地化
- 《PHP经典实例学习》之变量学习笔记
- PHP soap 经典实例
- php的经典实例
- PHP经典实例读书笔记--字符串
- PHP经典实例读书笔记--数字
- PHP经典实例读书笔记--变量
- PHP经典实例读书笔记--函数
- PHP经典实例读书笔记--表单
- PHP经典实例读书笔记 (数组)
- PHP经典实例读书笔记 (变量)
- 代码的坏味道之七 :Feature Envy(依恋情结)
- hdu1525
- 用rdesktop远程的方法
- hdu2036(改革春风吹满地)
- 解决iphone 5 88个像素点问题
- php经典实例-笔记2
- span font float 换行错位(IE兼容)
- MySQL 里设置或修改系统变量的几种方法,这个写的非常清晰
- 队列 顺序存储
- PHP程序员要知道的几个有用的PHP函数
- Android开源项目收集
- C++中模板使用介绍
- 关于renderInContext方法内存管理 memory warning
- [php] in_array 判断问题