ホームページ php教程 php手册 php实现设计模式之 原型模式

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

Jun 06, 2016 pm 07:47 PM
php プロトタイプ 成し遂げる モデル デザインパターン 合格

?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();
?>
ログイン後にコピー

  

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

 

说一下浅拷贝和深拷贝

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

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

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

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

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

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

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

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

CakePHP プロジェクトの構成

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

CakePHP の日付と時刻

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

CakePHP ファイルのアップロード

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

CakePHP ルーティング

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP について話し合う

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP クイックガイド

See all articles