<?php
/**
* @desc: Created by PhpStorm.
* @author: icehill
* @date: 2018/2/28 17:13
*
*/
//php对象复制
//在php5,一个对象变量已经不再保存整个对象的值。只是保存一个标识符来访问真正的对象内容。
// 当对象作为参数传递,作为结果返回,或者赋值给另外一个变量,另外一个变量跟原来的不是引用的关系,只是他们都保存着同一个标识符的拷贝,这个标识符指向同一个对象的真正内容。
class A{
public $name='icehill';
public function getName(){
return $this->name;
}
}
//深复制,复制对象的(我觉得对象的复制可以理解为用引用来实现,即$b=$a等价于$b=&a)
$a=new A();
//var_dump($a);
$b=$a;//
//var_dump($b);
$e=&$a;//
echo $a->getName();echo "\n";//输出icehill
echo $b->getName();echo "\n";//输出icehill
echo $e->getName();echo "\n";//输出icehill
$a->name='hello';
echo $b->getName();echo "\n";//输出hello
echo $e->getName();echo "\n";//输出hello
unset($a);
//echo 'a:'.$a->getName();echo "\n";// Undefined variable:
echo 'b:'.$b->getName();echo "\n";//输出hello
echo 'e:'.$e->getName();echo "\n";//输出hello
//潜复制,这里$c $d是不同对象的引用
$c=new A();
$d=clone $c;
//var_dump($c);
//var_dump($d);
echo $c->getName();echo "\n";//输出icehill
echo $d->getName();echo "\n";//输出icehill
$c->name='hello';
echo $d->getName();echo "\n";//输出icehill
echo $c->getName();echo "\n";//输出hello
//潜复制中对象属性的复制
$str='world';
$c->name=&$str;//这里name属性是一个引用,复制之后name指向的地址在$c $f中是同一个的
$f=clone $c;
echo $f->getName();echo "\n";//输出world
echo $c->getName();echo "\n";//输出world
$c->name='ttt';
echo $f->getName();echo "\n";//输出ttt
echo $c->getName();echo "\n";//输出ttt
作者心情:昨夜西风凋碧树,独上高楼,望尽天涯路。
如无特殊说明,文章均为本站原创,转载请注明出处
- 转载请注明来源:PHP类对象的复制
- 本文永久链接地址:http://icehill.cn/post/single/info/146.html