oop04复习

2014-9-3 10:48:45

要点:
--1、克隆对象
--2、__toString( )
--3、 __call( )
--4、自动加载类
--5、对象串行化

1、克隆对象以及__clone()方法

概述:对象属于引用类型,普通的"="号属于引用赋值

有时可能需要根据一个对象完全克隆出一个一模一样的对象,而且克隆以后,两个对象互不干扰。

格式:

$obj = new Class();
$obj2 = clone $obj;

但是,当要克隆的对象中有子对象或资源时,克隆会不完整

魔术方法:__clone()
当执行clone克隆时会自动调用的方法,主要用于解决对象中特殊属性的复制操作。

2、__toString( )

概述:当试图直接echo对象时,会报错。我们可以在类中加上这个方法,会在echo时自动调用

示例:

 public function __toString(){
echo "这是一个类.";
}

3、 __call( )

概述:当试图访问对象中不存在的方法时,会报错。我们可以在类中加上这个方法来处理这种情况

格式:

mixed __call( string $name , array $arguments )

第一个参数$name表示方法名
第二参数$arguments表示调用时的参数列表(数组类型)

示例:

public function __call($name,$args){
echo "您调用的方法{$name}不存在!参数列表:";
var_dump($args);
}

4、自动加载类(__autoload())

该方法位于类之外.
当new一个新对象时,程序会试图调用该方法自动包含所需要的文件

示例:

function __autoload($classname){
$name=$classname.".class.php";
if(file_exists($name)){
require($name);
echo "**自动加载了<font color='red'>".$name."</font>类<br>";
}else{
die("<font color='red'>".$name."</font>类不存在!");
}
}

5、对象串行化
对象也是一种在内存中存储的数据类型,他的寿命通常随着生成该对象的程序终止而终止.
有时候可能需要将对象的状态保存下来,需要时再将对象恢复.
**串行化(serialize):对象通过写出描述自己状态的数值来记录自己,这个过程称对象的串行化
串行化返回一个包含字节流的字符串.
以下两种情况需要将对象串行化:
01)对象需要在网络中传输时,将对象串行化成二进制串即可.
02)对象需要持久保存时,将对象串行化后写入文件或数据库.

**反串行化(unserialize):能够重新把字符串变回php原来的对象值

Note:串行化一个对象将会保存对象的所有属性变量和类名信息,但是不会保存对象的方法.
所以,反串行化时需导入原先对象的方法.

***** ***** *****

[**]对象串行化中的魔术方法__sleep( )和 __wakeup( )

__sleep(): 是执行串行化时自动调用的方法,目的是实现资源类型属性的关闭释放等操作

Note:sleep方法需要返回一个数组,其中数组中的值是串行化时要保留的属性名

__wakeup():是在执行反串行化时自动调用的方法,目的是实现资源属性的打开(sleep方法关闭的资源),即再次初始化.

【示例】

 public function __sleep(){
//此串行化要保留四个属性
return array('server', 'username', 'password', 'db');
}

【完整示例】

<?php
//声明一个Person类,包含三个成员属性和一个成员方法
class Person {
public $name = "zhangsan"; //人的名字
public $sex = "man"; //人的性别
public $age = 20; //人的年龄
public function say() { //这个人可以说话的方法, 说出自己的成员属性
echo "我的名字:".$this->name.",性别:".$this->sex.",年龄:".$this->age."<br>";
}
}
$person = new Person(); //能过Person类创建一个对象,对象的引用名为$person
$person_string = serialize($person); //通过serialize函数将对象串行化,返回一个字符串
file_put_contents("file.txt", $person_string); //将对象串行化后的字符串保存到file.txt文件中 //将file.txt文件中的字符串读出来并赋给变量$person_string
$person_string = file_get_contents("file.txt");
$person = unserialize($person_string); //进行反串行化操作,形成对象$person。
$person -> say(); //调用对象中的say()方法,用来测试反串行化对象是否成功

PHP面向对象04_串行化的更多相关文章

  1. 【PHP面向对象(OOP)编程入门教程】22.把对象串行化serialize()方法,__sleep()方法,__wakeup()方法

    有时候需要把一个对象在网络上传输,为了方便传输,可以把整个对象转化为二进制串,等到达另一端时,再还原为原来的对象,这个过程称之为串行化(也叫序列化), 就像我们现在想把一辆汽车通过轮船运到美国去,因为 ...

  2. PHP面向对象(OOP):把对象串行化serialize()方法,__sleep()方法,__wakeup()方法

    有时候需要把一个对象在网络上传输,为了方便传输,可以把整个对象转化为二进制串,等到达另一端时,再还原为原来的对象,这个过程称之为串行化(也叫序列化), 就像我们现在想把一辆汽车通过轮船运到美国去,因为 ...

  3. MFC用串行化实现文档存储和读取功能

    在面向对象的程序设计中,一般都是用二进制文件来保存文档资料.在VC++中控制和使用文件流的方法很多,MFC程序设计中常用的有两种方法:用CFile对象存储和读取文件:利用串行化存取文件.其中用CFil ...

  4. MFC六大核心机制之四:永久保存(串行化)

    永久保存(串行化)是MFC的重要内容,可以用一句简明直白的话来形容其重要性:弄懂它以后,你就越来越像个程序员了! 如果我们的程序不需要永久保存,那几乎可以肯定是一个小玩儿.那怕我们的记事本.画图等小程 ...

  5. 【Java EE 学习 72 下】【数据采集系统第四天】【移动/复制页分析】【使用串行化技术实现深度复制】

    一.移动.复制页的逻辑实现 移动.复制页的功能是在设计调查页面的时候需要实现的功能.规则是如果在同一个调查中的话就是移动,如果是在不同调查中的就是复制. 无论是移动还是复制,都需要注意一个问题,那就是 ...

  6. VC++ chap13 文档与串行化

    Lesson 13 文档与串行化 13.1使用CArchive类对文件进行读写操作 //让对象数据持久性的过程称之为串行化,或者序列化 void CGraphicView::OnFileWrite() ...

  7. Java 对象的串行化(Serialization)

    1.什么是串行化 对象的寿命通常随着生成该对象的程序的终止而终止.有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复.我们把对象的这种能记录自己的状态以便将来再生的能力.叫作对象的持续性(pe ...

  8. 【性能诊断】四、单功能场景的性能分析(RedGate,找到同一个客户端的并发请求被串行化问题)

    问题描述: 客户端js连续发起两个异步http请求,请求地址相同,但参数不同:POST http://*.*.*.*/*****/webservice/RESTFulWebService/RESTFu ...

  9. Oracle 6 - 锁和闩 - transaction的可串行化

    本文主要内容 1.transaction的可串行化 2.数据库并发带来的问题, dirty read, Nonrepeatable reads, Phantoms幻读 3.隔离级别和2中的问题 4. ...

随机推荐

  1. 1211php面向对象

    首先需要定义数组,$attr = array(直接给元素1,2,3)索引数组 关联数组 $attr = array("one"=>1,2,3) for($i=0;$i< ...

  2. Spring 学习笔记 3. 尚硅谷_佟刚_Spring_配置 Bean

    1,bean 的配置 <bean id="helloWorld" class="com.yfy.HelloWorld"> <property ...

  3. JS-JQuery(JSONP)调用WebService跨域若干技术点

    1.JSONP:JSON With Padding,让网页从别的网域获取信息,也就是跨域获取信息,可以当做是一种“工具”,大多数架构Jquery.EXTjs等都支持. 由于同源策略,一般来说位于 se ...

  4. http协议与网页优化泛谈

    最近公司开展职业技能培训,本人招录了部分内容写成博客,若有纰漏,欢迎拍砖. http简述: http又称超文本传输协议,是一种无状态&无记忆协议的运用层协议,处于tcp传输层协议之上,采用请求 ...

  5. 《LINUX内核设计与实现》读书笔记之第五章

    第五章——系统调用 5.1 与内核通信 1.为用户空间提供一种硬件的抽象接口 2.保证系统稳定和安全 3.除异常和陷入,是内核唯一的合法入口. API.POSIX和C库 关于Unix接口设计:提供机制 ...

  6. 链表反转 (Multi-method)

    链表反转是链表相关问题最基础的知识,做完LeetCode中LinkedList后才会有这种体会,因为ACM算法中不会涉及这一部分.解决这一问题有多种方法,在面试中面试官通常也会要求写出多种.包括sta ...

  7. Selenium中的几种等待方式,需特别注意implicitlyWait的用法

    摘:http://blog.csdn.net/pf20050904/article/details/20052485 最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题 ...

  8. easyui的datagrid打印(转)

    在使用easyui插件的时候,使用最多的应该是datagrid插件.有时候根据客户需求,可能需要将datagrid内容进行打印,这时候如果直接调用window.print,可能由于easyui的dat ...

  9. DLL和LIB的一些知识点(网上搜集)

    关于lib和dll的区别如下:(1)lib是编译时用到的,dll是运行时用到的.如果要完成源代码的编译,只需要lib:如果要使动态链接的程序运行起来,只需要dll.(2)如果有dll文件,那么lib一 ...

  10. JAVA学习博客---2015-7

    @Updata 2015.7.17  开始熟悉API.WPS首字母自动大写,有的没有加#编号的,其实方法首字母不是大写例如Char charAt 实际上是char charAt.当然骆驼写法charA ...