PHP_PHPチュートリアル「Simple Factory Pattern」のサンプルコード説明
単純なファクトリ パターン:
①抽象基本クラス: サブクラスに実装するいくつかの抽象メソッドをクラス内に定義します
②抽象基本クラスから継承するサブクラス: 基本クラスに抽象メソッドを実装します
③ファクトリ クラス: インスタンスに使用されるオブジェクト
この記事に戻ってこの写真を見ると、効果がさらに良くなります
カプセル化メソッドを使用する
class Calc{
/**
* 計算結果
*
* @param int|float $num1
* @param int|float $num2
* @param string $operator
* @return int|float
*/
public functionulate($num1, $num2,$ 演算子){
try {
$result=0;
switch ($operator){
case '+':
$result= $num1+$num2;
case '-':
$result = $num1- $num2;
case '*':
$result= $num1*$num2;
if ($num2==0) {
新しい例外をスローします。 "除数を 0 にすることはできません");
$result= $num1/$num2;
return $result;
}catch (Exception $e){
echo "入力が間違っています:" e->getMessage();
}
}
}
$test=new Calc();
// echo $test->calculate(2,3,'+');//print: 5
echo $test-> ;calculate(5,0,'/');//Print: エラーを入力しました: 除数を 0 にすることはできません
?>
利点: 上記のコードはオブジェクト指向のカプセル化機能を使用しています。 includeクラスさえあれば他のページでも気軽に使えます
デメリット:柔軟な拡張やメンテナンスができない
例:「剰余」の演算を追加したい場合は、 switch ステートメント ブロックの場合、コードを次のように変更する必要があります
ブランチ ステートメントを追加します
コードをコピーします
コードは次のとおりです:
case '%':
$result= $num1%$num2;
break;
//...省略....
}
}catch (Exception $e){
echo "入力が間違っています:".$e->getMessage();
}
?>
コード分析: 上記の方法を使用して電卓に新しい関数演算を追加すると、次のような欠点があります
① 元のコード ブロックを変更する必要がある 変更するときに、誤って元のコードを変更する可能性があります。 「新しい関数を追加する」ためのオリジナルコード コードを修正しました
② 「べき乗」「平方根」「対数」「三角関数」「統計」など、追加する関数が多い場合、または、And、Or、Not、Xor などのプログラマー専用の計算関数を追加するため、switch ステートメントに N 個の分岐ステートメントを追加する必要があります。計算関数に 20 または 30 の case 分岐ステートメントがある場合、コードが 1 画面を超えることを想像してください。コードの可読性が大幅に低下するだけでなく、小さな関数を追加するには、関連しない他の関数も追加する必要があります。説明: これはプログラムの実行効率を大幅に低下させます
解決策: OOP 継承とポリモーフィズムのアイデアを採用します
単純なファクトリ パターンの初期実装
コードは次のとおりです:
php
/* *
/**
*追加クラス
*/
class OperationAdd extends Operation {
public function getValue($num1,$num2){
return $num1+$num2
}
}
/**
*引き算のクラス
*/
class OperationSub extends Operation {
public function getValue($num1,$num2){
return $num1-$num2;
}
}
/**
* 掛け算のクラス
*/
class OperationMul extends Operation {
public function getValue($ num1,$num2){
return $num1*$num2;
}
}
/**
*部門クラス
*/
class OperationDiv extends Operation {
public function getValue($num1,$num2){
try {
if ($num2==0 ){
throw new Exception("除数を 0 にすることはできません");
}else {
return $num1/$num2;
}
}catch (Exception $e){
echo "エラーメッセージ:".$e-> ;getMessage();
}
}
}
?>
ここではオブジェクト指向の継承機能が採用されています。まず、仮想基底クラスを宣言し、サブクラスが実行するメソッドを指定します。基本クラス (getValue()) に実装する必要があります
分析: オブジェクト指向の継承機能を使用することで、「べき乗」、「平方根」、「対数」、「三角関数」などの元のプログラムを簡単に拡張できます。 、「統計」など、お待ちください。
コードをコピーします
コードは次のとおりです:
/**
* 余り(余り)を求める
*
*/
class OperationRem extends Operation {
public function getValue($num1,$num2){
return $num1%$num12
}
}
?>
未解決の問題がまだあります。それは、ユーザーが入力したオペレーターに従ってプログラムに対応するオブジェクトをインスタンス化させる方法です。
解決策: インスタンス化プロセスを実装するには別のクラスを使用します。このクラスは次のとおりです:
* エンジニアリングクラス、主にオブジェクトの作成に使用されます
* 機能: 入力された操作シンボルに従って、ファクトリは適切なオブジェクトをインスタンス化できます
*
* /
class Factory{
public static function createObj($operate){
switch ($operate){
case '+':
return new OperationAdd()
break;
新しいOperationSub();
break;
return new OperationSub()
break;
new OperationDiv()
}
$ test=Factory::createObj ('/');
$result=$test->getValue(23,0);
元の記事、転載元を明記してください: http://www.cnblogs.com/hongfei/
http://www.bkjia.com/PHPjc/325885.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/325885.html
技術記事

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます
