l 基本介绍 :

当我们需要将一个对象完全的赋值一份, 保证两个对象的属性和属性值一样,但是他们的数据库空间独立,则可以使用对象克隆。

<?php
header('content-type:text/html;charset=utf-8');
//__clone 魔术方法 class Sheep{
public $name;
protected $food; public function __construct($name, $food){
$this->name = $name;
$this->food = $food;
} //__clone 的魔术方法 //如果我们希望阻止克隆, 则将该__clone 声明为private即可
//在很多设计模式中,就会使用到这个特点-比如说,单例模式 public function __clone(){
//在克隆一个对象时,可以在这个 __clone 函数中去修改某个属性(如果有必须要的)
//$this->food = '青草';
echo '<br> __clone被调用';
}
} $sheep1 = new Sheep('多利', '青草'); //看一下对象的赋值方式
$sheep2 = $sheep1; //讲一下对象的比较 //当使用比较运算符(==)比较两个对象变量时,比较的原则是:如果两个对象的属性和属性值 都相等,而且两个对象是同一个类的实例,那么这两个对象变量相等 if($sheep2 == $sheep1 ){
echo '<br> $sheep2 == $sheep1';
} //而如果使用全等运算符(===),这两个对象变量一定要指向某个类的同一个实例(即同一个对象)。
if($sheep2 === $sheep1 ){
echo '<br> $sheep2 === $sheep1';
} // $sheep3 = new Sheep('多利', '<。)#)))≦');
//对象的克隆, 会触发__clone 的魔术方法
$sheep3 = clone $sheep1; if($sheep3 == $sheep1){
echo '<br> $sheep3 == $sheep1';
} if($sheep3 === $sheep1){
echo '<br> $sheep3 === $sheep1';
}

说明

(1) 当我们 $对象1 = clone $对象2, 会触发 __clone 方法

(2) 如果我们希望在克隆时,修改某个属性,则在__clone方法中去修改即可

(3) 如果我们希望阻止克隆,只需要将 __clone 魔术方法申明为private 即可.

最新文章

  1. kendoui treeview grid spreadsheet
  2. mysql replication principle--转
  3. Hibernate day01笔记
  4. webconfig和appconfig中出现特殊字符如何处理
  5. 洛谷P2734 游戏 A Game
  6. php获取请求的方式(get/post)
  7. Delphi之TreeView
  8. 一元多项式Polynomial的C语言实现
  9. Palindrome(Manacher)
  10. Struts2框架入门
  11. springMVC的异常处理
  12. Django后端向前端直接传html语言防止转义的方法(2种)
  13. threadpool源码学习
  14. 监控MySQL或Web服务是否正常
  15. Mysql MyISAM与InnoDB 表锁行锁以及分库分表优化
  16. 【linux】环境变量配置
  17. Jquery 组 checkbox双向控制与tr变色
  18. 《剑指offer》-数组乘积,不使用除法
  19. C#6.0中10大新特性的应用和总结
  20. The D Programming Language 书评

热门文章

  1. Dart编程数字Number
  2. GDI+在Delphi程序的应用 Photoshop色相饱和度明度功能
  3. Java Heap and Stack
  4. hdu多校第五场1006 (hdu6629) string matching Ex-KMP
  5. iOS报错锦集
  6. 转:container_of分析 研究内核的博客
  7. ES6新的特性有哪些?
  8. 15-MySQL-Ubuntu-数据表的查询-聚合函数(四)
  9. Eclipse中普通java项目转成Web项目
  10. 源码编译安装nginx详细步骤