ホームページ  >  記事  >  バックエンド開発  >  PHPファクトリーモードの使い方_PHPチュートリアル

PHPファクトリーモードの使い方_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:37:38928ブラウズ

基本的なファクトリ クラス

コードをコピー コードは次のとおりです:

class MyObject{
//オブジェクトはファクトリから返されます
}
class MyFactory{
public static function Factory(){
return new MyObject():
}
}
$instance=MyFactory::factory();

ファクトリ クラスを使用して画像ファイルを解析します
コードをコピーします コードは次のとおりです:

インターフェース IImage{
function getWidth();
class Image_PNG は IImage{
private $_width,$_height,$_data; $file){
$this->_file= $file;
$this->_parse();
private function _parse(){
//PNG 形式の解析を完了する
//$_width を埋める$_height,$_data;
}
パブリック関数 getWidth(){
return $this->_width;
}
public function getHeight(){
return $this->_height;
public function getData() {
return $this->_data; }
}
class Image_JPEG は IImage を実装します{
private $_width,$_height,$_data;
$this->_file=$file; ;
$this->_parse();
}
private function _parse(){
//JPEG 形式の解析を完了する
//Fill $_width,$_height,$_data;
public function getWidth() {
return $this->_width;
}
public function getHeight(){
return $this->_height;
}
public function getData(){
return $this->_data;
}
クラス ImageFactory{
パブリック静的関数ファクトリー( $file){
$pathParts=pathinfo($file);
switch (strto lower($pathParts['extension']))
{
case 'jpg':
$ret= new Image_JPEG($file);
break;
case 'png':
$ret=new Image_PNG($file)
default:
//問題があります
}
if($ret instanceof IImage) {
return $ret;
}else {
/ /問題
}
}
}
//画像ファイル名を使用してファクトリ メソッドを呼び出すと、渡されたファイルの種類に応じて異なるオブジェクトが取得されます。
//ImageFactoyr を呼び出します
$image=ImageFactory::factory('/path/to/my.jpg');
//$image は Image_JPEG クラスのインスタンスです
echo $image->getWidth();

データベースの移植性の問題を解決するためにファクトリ クラスを使用する
データベース アプリケーションでは、ファクトリ パターンは次の 2 つの側面で機能します。
. ソフトウェアがユーザー ベースを拡大するために、さまざまなデータベース プラットフォームをサポートしやすくします
。ソフトウェアが内部で使用され、データベースを変更する必要がある場合、アプリケーションを別のプラットフォームに簡単に移行できます
コード内で、A を作成します。これをテストするには、User という名前のデータベース テーブルを使用します。このテーブルは、email という名前の varchar 型フィールドを定義します



コードをコピーします

コードは次のとおりです:


interface IDatabaseBindings{
public function userExists($ email) );
}
クラス PGSQL は IDatabaseBindings{ を実装します。
$emailEscaped=pg_escape_string($email); $query="email='".$emailEscaped."'" のユーザーから 1 つを選択します if($result=pg_query($query,$this->_connection ) ){ return (pg_num_rows($result)>0)?true:false; }else{ }
}
}
class MYSQL は IDatabaseBindings{
protected $_connection; を実装します。 {
$this->_connection=mysql_connect('localhost');
mysql_select_db('example_db',$this->_connection)
}
public function userExists($email){
$emailEscaped=mysql_real_escape_string($ email) );
$query="email='".$emailEscaped."'" のユーザーから 1 つを選択result)>0)?true:false;
}else{
return false;
}
}
class DatabaseFactory{
$type=loadtypefromconfigfile(); ){
case 'PGSQL':
return new PGSQL();
case 'MYSQL();
}
}
}


IDatabaseBindings インターフェイスによって定義されたルールに基づいて、ファクトリによって返されたインスタンスのみを直接処理するデータベース接続のタイプ。



コードをコピーします

コードは次のとおりです:


//DatabaseFactoy を呼び出します
$db=DatabaseFactory::factory();
$db->userExists('person@example.com');

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/321890.html技術記事基本的なファクトリ クラスのコピー コードは次のとおりです。 class MyObject{ //オブジェクトはファクトリから返されます} class MyFactory{ public static function Factory(){ return new MyObject(): } } $instance=My...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。