• 专注于网站建设,网络推广,关键词优化,SEO优化,专业的网站建设开发团队!
首页 > IT技术 > PHP > 内容

php面向对象之克隆对象

2015-06-10 21:33:09   来源:叶景网络
    在前面的PHP面向对象之对象和引用,我们试图以"$b=$a"的方式复制对象以传递对象的值(内容),结果却是传递对象的地址,在结尾为了解决复制对象这个问题,提到了克隆的方法。接下来讲一下php面向对象之克隆对象。
    前面我们已经知道,使用传址引用的方式调用对象,实质调用的是同一个对象,有时需要建设立一个对象的副本,改变原来的对象时不希望影响到副本,在PHP中可以根据现在的对象来克隆出一个完全一样的对象,克隆出来的副本和原本两个对象完全独立而互不干扰。
    对象克隆
    在php中使用"clone"关键字来克隆对象。
    <?php
    class Person {
    public $name;                                                                                    
    function __construct($name="" ) {
    $this->name =$name;                                                                                               
    }
    function say()  {   
    echo "我叫:". $this->name ."<br>" ;
    }
    }
    $Person=new Person( "张三");
    $Person1=clone $Person; //使用clone关键字克隆(复制)对象,创建一个对象的副本
    // $Person1=$Person   //这不是复制对象,而是为对象多复制出一个访问该对象的引用
    $Person->say();                   
    $Person1->say();                   
    ?>
    上面程序运行结果为:
    我叫:张三
    我叫:张三
    克隆的副本和原本拥有相同的类和属性
    if($Person == $Person1){
    echo "Person和Person1具有相同的类和属性" ;
    }else{
    return false;
    }
    程序输出:Person和Person1具有相同的类和属性
    克隆的副本和原本存储在不相同的位置
    if ($Person === $Person1){
    echo "Person和Person1具有相同的类和属性且存储在相同的位置" ;
    } else{
    return false ;
    }
    程序结果为false。
    克隆的副本和原本独立而互不干扰
    我们来改变一下原本的属性值,看一下有什么影响
    $Person=new Person( "张三");
    $Person1=clone $Person;                
    $Person1-> name='李四' ;
    $Person->say();                   
    $Person1->say();
    程序运行结果为:
    我叫:张三
    我叫:李四
    由此可知,克隆出来的副本和原本两个对象完全独立而互不干扰。
    __clone()方法
    如果需要为克隆后的副本对象克隆时重新为成员属性赋值,可以在类中声明一个魔术方法"__clone"
    <?php
    class Person {
    public $name;
    function __construct($name="" ) {
    $this->name =$name;
    }
    function __clone(){//在对象克隆时自动调用,用来为新对象重新赋值
    $this->name ='李四' ;
    }
    function say()  {   
    echo "我叫:". $this->name ."<br>" ;
    }
    }
    $Person=new Person( "张三");
    $Person1=clone $Person;               
    $Person->say();                  
    $Person1->say();                  
    ?>
    程序运行结果为:
    我叫:张三
    我叫:李四
叶景网络,网络推广,网站建设
特别推荐RECOMMEND
搜索引擎网站关键词seo优化的意义
视频推广怎么做
网站seo优化怎么做关键词排上首页?
SEO介绍什么叫搜索引擎网站关键词优化
seo优化怎样做提升关键词排名
热点图文Hot
PHP通过soap调用.net接口asmx文件 PHP通过soap调用.ne
PHP开发环境配置 PHP开发环境配置
wamp集成环境的虚拟域名配置方法 wamp集成环境的虚拟
wamp独立安装配置 wamp独立安装配置
关注排行RANKING
1

PHP通过soap调用.net接口asmx文件

PHP通过soap调用.net接口asmx文件 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网...

2

PHP开发环境配置

PHP开发环境配置 下载PHP安装程序,并解压缩。(下载页面为http: www php net downloads php,下...

3

wamp集成环境的虚拟域名配置方法

wamp集成环境的虚拟域名配置方法 最近,发现身边很多人用wamp集成环境,这个虽然比较快捷,一步到位,但是只能访...

4

wamp独立安装配置

wamp独立安装配置 apache 中的 httpd conf LoadModule php5_module "D: lamp php5 php5apache2_2 dll " 加载模块并开启

5

php 获取今天明天昨天时间戳

php 获取今天明天昨天时间戳 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网...

6

PHP获取服务器信息 MySql版本和浏览器信息

PHP获取服务器信息 MySql版本和浏览器信息 1、$_SESSION[ PHP_SELF ] -- 获取当前正在执行脚本的文件名 2...

7

smarty 截取字符串函数 truncate的用法

smarty 截取字符串函数 truncate的用法 smarty truncate 截取字符串,从字符串开始处截取某长度的字符,默认的长度为8...

8

php编程常用函数方法等

php编程常用函数方法等 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网站...

9

如何让ThinkPHP的模板引擎达到最佳效率

如何让ThinkPHP的模板引擎达到最佳效率 默认情况下ThinkPHP框架系统默认使用的模板引擎是内置模板引擎。内置模板引擎支持模板文...