ホームページ  >  記事  >  バックエンド開発  >  コンストラクター プロトタイプ パターン プロトタイプ パターン (PHP の例)、prototypepattern_PHP チュートリアル

コンストラクター プロトタイプ パターン プロトタイプ パターン (PHP の例)、prototypepattern_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 09:07:441252ブラウズ

Constructor Prototype Pattern プロトタイプ パターン (PHP の例)、prototypepattern

クラスの大部分が同じで一部の部分だけが異なる場合、このクラスのオブジェクトが多数必要な場合、同じ部分が繰り返しインスタンス化されます。毎回非常にコストがかかりますが、以前にオブジェクトの同じ部分をクローンしておけば、コストを節約できます。

PHPの実装方法は、このクラスの初期化を__construct()関数とinitialize関数で別々に処理し、プロトタイプをpublic部分であるconstructに配置し、各オブジェクトの特殊部分をinitializeに配置します。このようにして、まず初期化せずにクラスを作成し、その後クラスを複製するたびに初期化します。

これはzend Frameworkの公式マニュアル http://framework.zend.com/manual/2.0/en/user-guide/database-and-models.html に記載されていますが、詳しく説明されていないので分析してみましょう。以下

1. はじめに

zf2モデルにはデータベースアクションを操作するアシスタントクラスに相当するalbumTableクラスがあり、そこでtablegatewayが使われています。

アルバムテーブルを毎回同じクラスで初期化するため、ルートディレクトリにある module.php ファイルの getServiceConfig() に初期化作業を配置し、ファクトリモードを使用し、コールバック関数を介して毎回 ServiceManager ( $sm) が必要です。オブジェクトをインスタンス化すると、そのオブジェクトが自動的に呼び出され、alumniTable が作成されます。以下のコードから、albumTable を作成するには、同じ方法で AlbumTableGateWay も作成する必要があることがわかります。このクラスは、これから説明するプロトタイプ パターンを使用します。

2. コードの詳細説明

リーリー

プロトタイプ パターンを使用するのは TableGateWay ではなく、ResultSet クラスであることに注意してください。 tablegateway が select() や insert() などのメソッドを呼び出すたびに、結果を表す ResultSet が作成され、これらの ResultSet の共通部分が複製され、データなどの固有の部分クラスが初期化されます。

3. その他のコード例

このプロトタイプをより明確に理解するために、zend の大きなフレームワークを脇に置いて、完全なコード例を見てみましょう。

の例 リーリー

プロトタイプ パターンに関するこの記事の前半は、実際にはコンストラクターで継承を使用してスケーラビリティを向上させる方法について説明しています。この 2 つのパターンを理解するのは簡単ではないかもしれません。プロトタイプ パターンに関する最後のコード部分を直接見てみましょう。

リーリー

これらのクラスは、実際には上記の zend コードのクラスに対応します

Dbadapter -- アダプター

RowGateWay -- ResultSet

ユーザーリポジトリ - TableGateWay

詳細については、コード内のコメントを参照してください。

ここの RowGateWay では、getusers で多数のインスタンス化が必要であることがはっきりとわかります。そのため、プロトタイプ モードが非常に必要です。

このクラスを使用するコードは次のとおりです

リーリー

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1059461.html技術記事 Constructor Prototype Pattern プロトタイプパターン (PHP の例)、prototypepattern クラスの大部分が同じで、一部だけが異なる場合、このクラスのオブジェクトが大量に必要な場合...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。