PHP面向对象魔术方法之__clone函数
2024-10-07 20:25:23
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 即可.
最新文章
- kendoui treeview grid spreadsheet
- mysql replication principle--转
- Hibernate day01笔记
- webconfig和appconfig中出现特殊字符如何处理
- 洛谷P2734 游戏 A Game
- php获取请求的方式(get/post)
- Delphi之TreeView
- 一元多项式Polynomial的C语言实现
- Palindrome(Manacher)
- Struts2框架入门
- springMVC的异常处理
- Django后端向前端直接传html语言防止转义的方法(2种)
- threadpool源码学习
- 监控MySQL或Web服务是否正常
- Mysql MyISAM与InnoDB 表锁行锁以及分库分表优化
- 【linux】环境变量配置
- Jquery 组 checkbox双向控制与tr变色
- 《剑指offer》-数组乘积,不使用除法
- C#6.0中10大新特性的应用和总结
- The D Programming Language 书评