sdfasd
<?php
/**
* 原型模式(深拷贝+浅拷贝)
*/
declare(strict_types=1);//开启强类型模式
class CopyObj
{
public $array;
}
//抽象原型类
abstract class Prototype
{
protected $attach;
public function __construct(CopyObj $obj)
{
$this->attach = $obj;
}
public function set($name, $value)
{
$this->$name = $value;
}
public function get($name)
{
return $this->$name;
}
public function getAttach()
{
return $this->attach;
}
abstract public function clone();
}
class DeepCopy extends Prototype
{
public function clone()
{
$obj = clone $this;
return $obj;
}
}
class ShallowCopy extends Prototype
{
public function clone()
{
$serializeObj = serialize($this);
$obj = unserialize($serializeObj);
return $obj;
}
}
123
123
//----------深拷贝--------------
$chairman = new CopyObj();
$chairman->array = ['×××', '×××', '江泽明'];
$deepCopyObj1 = new DeepCopy($chairman);
$deepCopyObj2 = $deepCopyObj1->clone();
echo "<pre>";
var_dump($deepCopyObj1->getAttach());
var_dump($deepCopyObj2->getAttach());
//修改对象
$chairman->array = ['×××', '×××'];
var_dump($deepCopyObj1->getAttach());
var_dump($deepCopyObj2->getAttach());
asdsad
//-------------浅拷贝-------------
$start = new CopyObj();
$start->array = ['刘德华', '张学友', '郭富城', '黎明'];
$deepCopyObj3 = new ShallowCopy($start);
$deepCopyObj4 = $deepCopyObj3->clone();
var_dump($deepCopyObj3->getAttach());
var_dump($deepCopyObj4->getAttach());
//修改对象
$start->array = ['周杰伦'];
var_dump($deepCopyObj3->getAttach());
var_dump($deepCopyObj4->getAttach());
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。