在对象的克隆期间,我们有时候不希望把所有的属性克隆过来,希望有些局部位置做一点改动,如一个字段的值。这时可以采用要在克隆的类中定义一个方法__clone(),从而调整对象的克隆行为,即对克隆的过程中,一些局部的代码可以设置成自己需要的代码。其执行是在现有的对象成员复制到目标对象之后,还会执行__clone()方法指定的操作。
下面创建一个案例,演示一下__clone()方法的使用。该案例的代码如下:
案例6-2
<?php
class MyCloneable {
public static $id = 0;
function __construct() {
$this->id = self::$id++;
}
function __clone() {
$this->address = "New York";
$this->id = self::$id++;
}
}
$obj = new MyCloneable();
$obj->name = "Hello";
$obj->address = "Tel-Aviv";
print $obj->id . "\n";
$obj_cloned = clone $obj;
print $obj_cloned->id . "\n";
print $obj_cloned->name . "\n";
print $obj_cloned->address . "\n";
?>
将上述代码保存,文件名称为clone1.php,并保存到指定的位置。打开IE浏览器,在地址栏中输入
http://localhost:8080/class/clone1.php,直接就可以运行了