对象克隆

在php中使用"clone"关键字来克隆对象。

class Person {

public $name;

function __construct($name="" ) {

$this->name =$name;

}

function say()  {

echo "我叫:". $this->name ."
" ;

}

}

$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"

class Person {

public $name;

function __construct($name="" ) {

$this->name =$name;

}

function __clone(){//在对象克隆时自动调用,用来为新对象重新赋值

$this->name ='李四' ;

}

function say()  {

echo "我叫:". $this->name ."
" ;

}

}

$Person=new Person( "张三");

$Person1=clone $Person;

$Person->say();

$Person1->say();

?>

程序运行结果为:

我叫:张三

我叫:李四

php程序克隆,php克隆 - freedom - OSCHINA - 中文开源技术交流社区相关推荐

  1. mysql 源头锁,mysql 使用手册 - 追梦,一个伟大程序员的源头。 - OSCHINA - 中文开源技术交流社区...

    在Console中创建procedure的过程 delimiter $$ create procedure name(IN parameter INT) begin ................. ...

  2. 如何用php写表单中的年月日,php写的日历程序 - adamboy的个人页面 - OSCHINA - 中文开源技术交流社区...

    $weekArr = array('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); //获取空格: //echo date("D",strto ...

  3. php 并发下载文件,PHP 并发下载 - 鸟屁不会的程序猿的个人空间 - OSCHINA - 中文开源技术交流社区...

    /** 并发下载,大概方法需要自己调整代码 */ function downloadMulti($download_url,$multi_num=2,$down_file_path='/tmp',$t ...

  4. mysql外码内码定义_中文编码杂谈(转) - CodeAxe的个人页面 - OSCHINA - 中文开源技术交流社区...

    编码问题的例子 在windows自带的notepad(记事本)程序中输入"联通"两个字,保存后再次打开,会发现"联通"不见了,代之以"��ͨ" ...

  5. java 在界面上画一个时钟_编写程序显示一个时钟 - javaCoder的个人页面 - OSCHINA - 中文开源技术交流社区...

    编写程序显示一个时钟.示例输出如图所示. 代码: package com.DisplayClock; import javax.swing.*; import java.awt.*; import j ...

  6. 微信步数C语言程序,获取微信步数 - osc_1v2pb1nt的个人空间 - OSCHINA - 中文开源技术交流社区...

    const util = require('../../utils/util.js') Page({ /** * 页面的初始数据 */ data: { runData:[], }, /** * 生命周 ...

  7. 卡券php小程序,微信小程序领取卡券 - osc_88a08cel的个人空间 - OSCHINA - 中文开源技术交流社区...

    微信小程序领取卡券 标签(空格分隔): php 开发前需要准备的工作 1 小程序和公众号要有绑定 2 小程序和该公众号要绑定到同一个开发平台下 [https://open.weixin.qq.com/ ...

  8. java实现一个跳转结构程序,Java程序控制结构 - osc_12yjz2ym的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.分支结构 概念:程序从两条或多条路径中选择一条去执行,这种结构称为分支结构 1. if结构 特点: ① 条件表达式的形式可以为: boolean的变量 boolean变量的赋值 关系表达式 逻辑表 ...

  9. php 小程序 运动步数_小程序同步微信步数 - xiangqian1的个人空间 - OSCHINA - 中文开源技术交流社区...

    小程序获取微信运动步数,咱们看文档:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/werun/wx.getWeRunDat ...

最新文章

  1. 如何提升你的能力?给年轻程序员的几条建议
  2. R语言数据包自带数据集之survival包的colon数据集字段解释、数据导入实战
  3. python 报错 TypeError: ‘int‘ object is not subscriptable 解决方法
  4. FCKeditor 2.6 精简版
  5. python中readline的用法_python中readline的用法
  6. 四、深入elasticsearch中文搜索
  7. 用哈希桶实现错位字组的分类(Group Anagrams)
  8. java 重启tomcat_linux下重启tomcat的命令
  9. 构建嵌入式linux系统_用于构建嵌入式Linux系统的4种工具
  10. 2018江苏冬令营5 交换矩阵
  11. 面试—每日一题(2)
  12. Python[8] :paramiko模块多进程批量管理主机
  13. c语言控制台不退出程序,怎样可以屏蔽控制台程序的关闭按钮
  14. linux apache支持ipv6,如何在Nginx和Apache中启用IPv6?
  15. nginx-配置记录
  16. 拯救者Y9000P+因特尔11代+3060Ubuntu驱动安装
  17. 渥太华大学计算机科学COOP,渥太华大学专业哪个好
  18. HTTP的options方法作用
  19. 迈成专转本三毛计算机,念念不忘,必有回响【迈成专转本学员分享】
  20. excel启用宏在哪里_Excel 2010在不启用的情况下运行宏

热门文章

  1. 【本科生科研入门】如何整理个人大学生涯的成果?
  2. 利用Matlab设计滤波器(FDAT) .
  3. 移植u-boot-1.3.4到GT2440(第二版2.0)
  4. STM32+ESP8266+MQTT微信小程序SoftAP一键配网接入腾讯物联网平台
  5. 2011推荐系统论坛游记:爱的反义词不是恨
  6. python数据的存储结构是指_python数据结构
  7. 高中信息技术c语言编程题,高中信息技术招聘C语言编程题精选.doc
  8. ipv6地址概述——了解ipv6与ipv4不同
  9. 乘法逆元 java_java写的三个求乘法逆元的算法
  10. webERP的深入浅出系列——1 基础数据准备初始化