首页/PHP/PHP克隆对象__clone()的实例及原理

PHP克隆对象__clone()的实例及原理

1、对象的__clone()方法不能够直接被调用,只有当通过关键字 clone 克隆一个对象时才可以使用该对象调用__clone()方法。当创建对象的一个副本时,php5将会检查__clone()方法是否存在。如果不存在,那么它就会调用默认的__clone()方法,复制对象的所有属性。如果__clone方法已经定义过,那么__clone()方法就会负责设置新对象的属 性。所以在__clone()方法中,只需要覆盖那些需要更改的属性就可以了。 2、php 对象复制,实际上是引用操作,因此使用 $objA = $objB 这种写法时,$objA与$objB会指向相同的内存地址。当$objA的发生变化时,$objB也会跟着一起变化(因为是引用的同一块内存区域)。 3、那么大多数情况下,我们需要单独的克隆一个对象,并且两个对象之间是相互独立的,这时候我们就需要使用clone了。

实例一、在执行克隆的过程中,没有定义__clone()方法,默认复制对象的所有属性


<?php
class person{
	public $name;
	public $age;
	public function __construct($name="",$age=""){
		$this->name = $name;
		$this->age = $age;
	}
}

$person1 = new person("mido",30);
$person2 = clone $person1;
echo $person2->name.$person2->age;
?>

实例二、在执行克隆的过程中,定义了__clone()方法,并为新的对象进行初始化属性


<?php
class person{
	public $name;
	public $age;
	public function __construct($name="",$age=""){
		$this->name = $name;
		$this->age = $age;
	}
	public function __clone(){
		$this->name = "omiga";
		$this->age = 32;
	}
}

$person1 = new person("mido",30);
$person2 = clone $person1;
echo $person2->name.$person2->age;
?>
总结:以上就是clone方法的简单实例了,当然你必须要明白,PHP的object clone采用的是浅拷贝(shallow copy)的方法,如果对象里的属性成员本身就是引用类型的,clone以后这些成员并没有被真正复制,仍然是引用的。关于此部分,将在后期教程中讲解。
收藏:

相关资讯