第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > php程序克隆 php克隆 - freedom - OSCHINA - 中文开源技术交流社区

php程序克隆 php克隆 - freedom - OSCHINA - 中文开源技术交流社区

时间:2024-08-10 07:07:38

相关推荐

php程序克隆 php克隆 - freedom - OSCHINA - 中文开源技术交流社区

对象克隆

在php中使用"clone"关键字来克隆对象。

class Person {

public $name;

function __construct($name="" ) {

$this->name =$name;

}

function say() {

echo "我叫:". $this->name ."

" ;

}

}

$Person=new Person( "张三");

$Person1=clone $Person; //使用clone关键字克隆(复制)对象,创建一个对象的副本

// $Person1=$Person //这不是复制对象,而是为对象多复制出一个访问该对象的引用

$Person->say();

$Person1->say();

?>

上面程序运行结果为:

我叫:张三

我叫:张三

克隆的副本和原本拥有相同的类和属性

if($Person == $Person1){

echo "Person和Person1具有相同的类和属性" ;

}else{

return false;

}

程序输出:Person和Person1具有相同的类和属性

克隆的副本和原本存储在不相同的位置

if ($Person === $Person1)

echo "Person和Person1具有相同的类和属性且存储在相同的位置" ;

} else{

return false ;

}

程序结果为false。

克隆的副本和原本独立而互不干扰

我们来改变一下原本的属性值,看一下有什么影响

$Person=new Person( "张三");

$Person1=clone $Person;

$Person1-> name='李四' ;

$Person->say();

$Person1->say();

程序运行结果为:

我叫:张三

我叫:李四

由此可知,克隆出来的副本和原本两个对象完全独立而互不干扰。

__clone()方法

如果需要为克隆后的副本对象克隆时重新为成员属性赋值,可以在类中声明一个魔术方法"__clone"

class Person {

public $name;

function __construct($name="" ) {

$this->name =$name;

}

function __clone(){//在对象克隆时自动调用,用来为新对象重新赋值

$this->name ='李四' ;

}

function say() {

echo "我叫:". $this->name ."

" ;

}

}

$Person=new Person( "张三");

$Person1=clone $Person;

$Person->say();

$Person1->say();

?>

程序运行结果为:

我叫:张三

我叫:李四

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。