Heim > php教程 > php手册 > Hauptteil

php实现设计模式之 原型模式

WBOY
Freigeben: 2016-06-06 19:47:27
Original
1138 Leute haben es durchsucht

?php/* * 原型模式:通过复制已经存在的对象来创建新对象。 * 通过原型实例指定创建对象的种类,并且通过copy这些原型创建信的对象 * 是创建型模式 * 有的时候创建一个对象有很多步骤才算是完成一个完整的创建过程,我要再创建一个的话,还得从头开始,不如

<?php /*
 * 原型模式:通过复制已经存在的对象来创建新对象。
 * 通过原型实例指定创建对象的种类,并且通过copy这些原型创建信的对象
 * 是创建型模式
 * 有的时候创建一个对象有很多步骤才算是完成一个完整的创建过程,我要再创建一个的话,还得从头开始,不如复制,使用原型模式实现。
 * 原型模式还可以某个对象在运行中的状态
 */

interface Potrotype{
	public function copy();
}

//通过在原型类中加一个copy方法,使得这个原型类的实例可以被复制
class Demo implements Potrotype{
	private $state;
	
	public function setState($state){
		$this->state = $state;
	}
	
	public function getState(){
		return $this->state;
	}
	
	public function copy(){
		return clone $this;//浅拷贝

		/*
		 * 深拷贝
		 */
//		$tmp = serialize($this);
//		$tmp = unserialize($tmp);
//		return $tmp;
	}
}

class Client{
	public static function main(){
		$obj1 = new Demo();
		$obj1->setState(23);
		$obj2 = $obj1->copy();
		$res = $obj2->getState();
		echo $res;
	}
}
Client::main();
?>
Nach dem Login kopieren

  

php实现设计模式之 原型模式

 

说一下浅拷贝和深拷贝

大学学习c语言时,提到过这两个的区别。我依稀记得是 值拷贝是深拷贝,而指针拷贝是浅拷贝。

浅复制呢又称为浅拷贝,深复制又称为深拷贝。

浅复制的话,就是通过一个原型实例(这里暂称为老对象)克隆所得到的对象(这里暂时称为新对象),

而这个新对象中所有的值类型变量都含有与老对象相同的值,

但是,新对象所有的对其他对象的引用却是和老对象指向同一个地方,

即对引用类型来说,老对象和新对象指向同一个引用对象。

深复制呢,和浅复制就一点不同,那就是,

新对象所有的对其他对象的引用都是指向了复制过的对象,而不再是和老对象指向同一个对象。

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!