clone 关键字用于克隆一个完全一样的对象,__clone() 方法来重写原本的属性和方法。

对象克隆

有的时候我们需要在一个项目里面使用两个或多个一样的对象,如果使用 new 关键字重新创建对象,再赋值上相同的属性,这样做比较烦琐而且也容易出错。PHP 提供了对象克隆功能,可以根据一个对象完全克隆出一个一模一样的对象,而且克隆以后,两个对象互不干扰。

使用关键字 clone 来克隆对象。语法:

$object2 = clone $object;

例子:

class Person {

private $name;

private $age;

function __construct($name, $age) {

$this->name=$name;

$this->age=$age;

}

function say() {

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

echo "我的年龄是:".$this->age;

}

}

$p1 = new Person("张三", 20);

$p2 = clone $p1;

$p2->say();

?>

运行例子,输出:

我的名字叫:张三

我的年龄是:20

__clone()

如果想在克隆后改变原对象的内容,需要在类中添加一个特殊的 __clone() 方法来重写原本的属性和方法。__clone() 方法只会在对象被克隆的时候自动调用。

例子:

class Person {

private $name;

private $age;

function __construct($name, $age) {

$this->name = $name;

$this->age = $age;

}

function say() {

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

echo " 我的年龄是:".$this->age."
";

}

function __clone() {

$this->name = "我是假的".$this->name;

$this->age = 30;

}

}

$p1 = new Person("张三", 20);

$p1->say();

$p2 = clone $p1;

$p2->say();

?>

运行例子,输出:

我的名字叫:张三 我的年龄是:20

我的名字叫:我是假的张三 我的年龄是:30

__clone class php_PHP 对象克隆 clone 关键字与 __clone() 方法相关推荐

  1. date对象加十分钟_一张图讲解对象锁和关键字synchronized修饰方法(代码块)

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 每个对象在出生的时候就有一把钥匙(监视器Monitor),那么被synchronized 修饰的方法相当于给方法加了一个锁 ...

  2. Java - 对象克隆

    目录 对象克隆 浅克隆 深克隆 多层克隆 对象克隆 在讨论对象克隆之前, 可能会有人说 , 不能直接new一个吗?为什么要克隆 首先关于这个问题, 直接new一个对象, 这个对象里面包含的成员变量是n ...

  3. Java 对象的克隆Clone和必须了解的浅拷贝与深拷贝

    前言 为什么要写这篇文章? 因为我最近无意间看到了一些项目的代码,不管是曾经编码的人还是新接手的人, 在想完全克隆复制一个已经存在的对象,做为后续的使用,竟然都是采取了重写new一个,然后一个个属性字 ...

  4. java的对象克隆技术clone()之浅度克隆(shallow Clone)

    要使两个对象(栈空间不同)具有相同的属性,需要利用java语言的对象克隆技术.对象克隆就是对象的复制,即完整的复制一个对象.java.lang.Object类的 clone()方法能够实现对象的复制. ...

  5. __clone class php_PHP中__clone()方法详解

    __clone(),当对象复制完成时调用 在多数情况下,我们并不需要完全复制一个对象来获得其中属性.但有一个情况下确实需要:如果你有一个 GTK 窗口对象,该对象持有窗口相关的资源.你可能会想复制一个 ...

  6. java 克隆一个对象_Java对象克隆

    Java对象克隆 1 什么是Java对象克隆 对象克隆是创建一个对象的副本的方式.Object类的clone() 方法用于克隆对象. java.lang.Cloneable接口必须由我们要建立其对象克 ...

  7. Java学习总结:34(对象克隆)

    对象克隆 对象克隆就是对对象的复制操作,在Object类中存在一个clone()方法用于对象的克隆操作.该方法如下: protected Object clone() throws CloneNotS ...

  8. public接口可以被任何一个类实现_一文带你深入Java核心技术:对象克隆+接口与回调,还有这种操作...

    对象克隆 当拷贝一个变量时,原始变量与拷贝变量引用同一个对象,如图6-1所示.这就是说,改变一个变量所引用的对象将会对另一个变量产生影响. Employee original = new Employ ...

  9. Java克隆(Clone)的应用

    Java克隆(Clone)的应用 简介: Java克隆(Clone)是Java语言的特性之一,但在实际中应用比较少见.但有时候用克隆会更方便更有效率. 对于克隆(Clone),Java有一些限制: 1 ...

最新文章

  1. 每日一问一周汇总:第2期
  2. 基于地图开发控件GMap.Net 使用 (一) 原创
  3. C++设计模式--状态模式(state)
  4. EOJ_1020_铁路调度
  5. javascript 点点滴滴01章 javascript的认知
  6. HTTP Response Splitting攻击探究 转
  7. CSS+JS实现兼容性很好的无限级下拉菜单
  8. 用Python进行数学建模(一)
  9. php获取扫描枪数据,条码扫描枪的读取技巧
  10. 个人重装系统前备份___1000款最杰出的软件清单:
  11. Unity 5.3制作VR项目
  12. 在linux下恶臭hellotext中作用的?,《Linux内核与程序设计》实验学习笔记
  13. Android常用第三方支付
  14. 怎么写好一篇接口文档
  15. python3-函数与参数以及空值
  16. 解决choice金融终端Excel/Wps插件修复visual basic异常
  17. Linux查看硬盘信息方法总结
  18. Win11新电脑开机怎么跳过登录microsoft账户?
  19. LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件...
  20. CSS translation

热门文章

  1. img边框的border属性
  2. 找出如下数组中最大的元素和最小的元素, a[][]={{3,2,6},{6,8,2,10},{5},{12,3,23}}
  3. C++ Primer第18章Vector的再实现及bug修正
  4. 在centos上,oracle数据库更改IP后无法启动监听,解决方法
  5. 升级到asp.net core 3.1遇到的json异常
  6. SpringMVC 静态资源CSS,JS访问不了 解决方法
  7. vue打包后element-ui部分样式(图标)异常问题
  8. Android Retrofit+RxJava 优雅的处理服务器返回异常、错误
  9. No input file specified.问题的解决
  10. 在解决方案中所使用 NuGet 管理软件包依赖