php设计模式之原型模式
程序员文章站
2022-05-13 20:38:39
...
name = $name; } public function setName($name){ $this->name = $name; } public function getName(){ return $this->name; } /* 浅拷贝: 被拷贝对象的所有变量都含有与原对象相同的值,而且对其他对象的引用仍然是指向原来的对象。即浅拷贝只负责当前对象实例,对引用的对象不做拷贝。 深拷贝: 被拷贝对象的所有的变量都含有与原来对象相同的值,除了那些引用其他对象的变量。那些引用其他对象的变量将指向一个被拷贝的新对象,而不再是原有那些被引用对象。 即深拷贝把要拷贝的对象所引用的对象也都拷贝了一次,而这种对被引用到的对象拷贝叫做间接拷贝。深拷贝要深入到多少层,是一个不确定的问题。 在决定以深拷贝的方式拷贝一个对象的时候,必须决定对间接拷贝的对象是采取浅拷贝还是深拷贝还是继续采用深拷贝。 因此,在采取深拷贝时,需要决定多深才算深。此外,在深拷贝的过程中,很可能会出现循环引用的问题。 利用序列化来做深拷贝: 利用序列化来做深拷贝,把对象写到流里的过程是序列化(Serilization)过程,但在业界又将串行化这一过程形象的称为“冷冻”或“腌咸菜”过程; */ public function copy(){ //潜拷贝 //return clone $this; //深拷贝 $serialize_obj = serialize($this); $clone_obj = unserialize($serialize_obj); return $clone_obj; }}$pro = new \Tools\sonPrototype("prototype1
");echo $pro->getName();$pro2 = clone $pro;$pro2->setName("prototype2
");echo $pro2->getName();$pro3 = $pro->copy();$pro3->setName("prototype3
");echo $pro3->getName();
上一篇: 基于TP的灵感,用PDO类封装了一个链式Model底层
下一篇: 替换字符串的有关问题