通过“复制”一个已经存在的实例来返回新的实例,而不是新建实例。
PHP需要注意深浅复制问题。PHP对于对象属性默认是浅复制。
举个栗子,网站上下载电子书。电子书好比是一个对象,大家需要阅读只需下载下来(复制)即可,不需要重复去生成电子书,很方便。
此处应该有UML图,时间关系,后期补上...
<?php
interface website{
public function copy();
}
class Download implements website{
private $_ebook;
public function __construct($ebook) {
$this->_ebook = $ebook;
}
//深拷贝
public function __clone() {
$this->_ebook = clone $this->_ebook;
}
public function copy() {
return clone $this;
}
}
class Ebook {
public $name = 'Head First';
}
//client
$ebook = new Ebook();
//大神上传电子书
$download = new Download($ebook);
//大家在网站下载
$download->copy();