码迷,mamicode.com
首页 > Web开发 > 详细

PHP面向对象04

时间:2014-09-13 00:43:34      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   ar   strong   文件   数据   


oop04复习

2014-9-3 10:48:45

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

 

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

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

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

格式:

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

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

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

2、__toString( )

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

示例:

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

 

3、 __call( )

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

格式:

mixed __call( string $name , array $arguments )

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

示例:

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

 

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

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

示例:

1 function __autoload($classname){
2     $name=$classname.".class.php";
3     if(file_exists($name)){
4         require($name);
5         echo "**自动加载了<font color=‘red‘>".$name."</font>类<br>";
6     }else{
7         die("<font color=‘red‘>".$name."</font>类不存在!");
8     }
9 }

 

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

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

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

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

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

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

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

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


【示例】

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

 

【完整示例】

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

 

PHP面向对象04

标签:style   blog   color   io   os   ar   strong   文件   数据   

原文地址:http://www.cnblogs.com/52fhy/p/3969360.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!