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());
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。