本文共 1833 字,大约阅读时间需要 6 分钟。
sdfasd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | <?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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | //----------深拷贝-------------- $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
1 2 3 4 5 6 7 8 9 10 11 12 13 | //-------------浅拷贝------------- $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()); |