ホームページ >バックエンド開発 >PHPチュートリアル >PHP のプロトタイプ パターンについて 1 つの記事で学習します
前回の記事「 PHP のイテレータ パターンについての簡単な説明 」では PHP のイテレータ パターンについて紹介しましたが、この記事では PHP のプロトタイプ パターンについて理解します。
#プロトタイプ モードは、実際にはクローン モードと呼ばれています。その主な動作はオブジェクトのクローンを作成することですが、クローンされたオブジェクトを元のプロトタイプと呼ぶため、このパターンに名前が付けられています。正直、使い方からするとクローンモードと呼んだ方が適切な気がします。
GoF 定義: プロトタイプ インスタンスを使用して、作成するオブジェクトの種類を指定し、次のようにして新しいオブジェクトを作成します。これらのプロトタイプのコピー
GoF クラス図:
##コードの実装:
abstract class Prototype { public $v = 'clone' . PHP_EOL; public function __construct() { echo 'create' . PHP_EOL; } abstract public function __clone(); }まず、シミュレーションを通じてプロトタイプを定義します. ここでは主に __clone() メソッドをシミュレーションします。実は、これは PHP に付属している魔法のメソッドで、定義する必要はまったくなく、プロトタイプ クラスに実装するだけで済みます。 clone キーワードを外部で使用してオブジェクトのクローンを作成する場合は、このマジック メソッドを直接入力することになります。この魔法のメソッドでは、プロパティ、特に参照プロパティに対するいくつかの独自の処理を処理できます。この例では、値型変数のみを使用しました。参照型の問題が反映されないため、参照型変数の処理については後の例で説明します。
class ConcretePrototype1 extends Prototype { public function __clone() { } } class ConcretePrototype2 extends Prototype { public function __clone() { } }シミュレーションの特定の実装のプロトタイプは、実際には __clone() メソッドのメイン実装です。これについては、後で具体的な例を見て説明します。
class Client { public function operation() { $p1 = new ConcretePrototype1(); $p2 = clone $p1; echo $p1->v; echo $p2->v; } } $c = new Client(); $c->operation();クライアントはクローンを使用してコピーします
p2 にも同じ $v 属性があります。
モバイル オペレーティング システム (PC のオペレーティング システムも想像してください) はデバイスにどのようにインストールされますか?実際、彼らは元のシステムを絶えずコピーしてコピーしています。 Microsoft の例は、この問題を非常によく示しています。Microsoft が当時帝国になれたのは、Winodws オペレーティング システムのコピーを CD にコピーし、それを何千もの家庭に販売し続けたからです (もちろん、ここでは中国に何の問題もありません) )。中国市場に関しては、多数の専門家が Windows をクラックし、このファイルをコンピュータにインストールする前に継続的にコピーしました。これは、携帯電話やスマートデバイスなどのさまざまな製品のオペレーティング システムやソフトウェアにも当てはまります。 1 つの開発の無制限のコピーが、ソフトウェア業界で莫大な利益をもたらす理由です。何しろ当社のシステムはAndroidネイティブシステムをベースに多くのエンジニアが日夜努力して開発したものですから、出荷間近の携帯電話に急いでコピーしてください! !
完整代码:https://link.juejin.cn/?target=https%3A%2F%2Fgithub.com%2Fzhangyue0503%2Fdesignpatterns-php%2Fblob%2Fmaster%2F08.prototype%2Fsource%2Fprototype.phpExample 再び携帯電話の話に戻りますが、今回はさまざまな通信事業者のニーズに基づいてカスタマイズされた一連の電話、つまりパッケージ電話を開発しています。正直なところ、これらの携帯電話には違いはなく、ほとんどの携帯電話は同じ構成ですが、キャリアのシステムが異なり、場合によっては CPU やメモリが異なるモデルもあります。現時点では、プロトタイプ モードを使用して、相違点の一部のみをすばやくコピーして変更できます。
プロトタイプ モードの製品携帯電話クラス図:
#
完整源码:https://link.juejin.cn/?target=https%3A%2F%2Fgithub.com%2Fzhangyue0503%2Fdesignpatterns-php%2Fblob%2Fmaster%2F08.prototype%2Fsource%2Fprototype-phone.php
<?php interface ServiceProvicer { public function getSystem(); } class ChinaMobile implements ServiceProvicer { public $system; public function getSystem(){ return "中国移动" . $this->system; } } class ChinaUnicom implements ServiceProvicer { public $system; public function getSystem(){ return "中国联通" . $this->system; } } class Phone { public $service_province; public $cpu; public $rom; } class CMPhone extends Phone { function __clone() { // $this->service_province = new ChinaMobile(); } } class CUPhone extends Phone { function __clone() { $this->service_province = new ChinaUnicom(); } } $cmPhone = new CMPhone(); $cmPhone->cpu = "1.4G"; $cmPhone->rom = "64G"; $cmPhone->service_province = new ChinaMobile(); $cmPhone->service_province->system = 'TD-CDMA'; $cmPhone1 = clone $cmPhone; $cmPhone1->service_province->system = 'TD-CDMA1'; var_dump($cmPhone); var_dump($cmPhone1); echo $cmPhone->service_province->getSystem(); echo $cmPhone1->service_province->getSystem(); $cuPhone = new CUPhone(); $cuPhone->cpu = "1.4G"; $cuPhone->rom = "64G"; $cuPhone->service_province = new ChinaUnicom(); $cuPhone->service_province->system = 'WCDMA'; $cuPhone1 = clone $cuPhone; $cuPhone1->rom = "128G"; $cuPhone1->service_province->system = 'WCDMA1'; var_dump($cuPhone); var_dump($cuPhone1); echo $cuPhone->service_province->getSystem(); echo $cuPhone1->service_province->getSystem();説明:
cmPhone の service_province オブジェクトの属性も変更されました。
CUPhone で、新しい service_province オブジェクトを作成しました。今回は、
#cuPhone の外部にある参照オブジェクトの値です。
著者:ハードコア プロジェクト マネージャー」推奨学習: 「
PHP ビデオ チュートリアル
以上がPHP のプロトタイプ パターンについて 1 つの記事で学習しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。