目次
シングルケースモード
ホームページ バックエンド開発 PHPチュートリアル さまざまな PHP 設計パターンの簡単な実践例

さまざまな PHP 設計パターンの簡単な実践例

Mar 14, 2018 am 10:47 AM
php デザインパターン

私は、プログラマーにとって、フレームワーク、バージョン、さらには言語さえも実際には重要ではないといつも感じています。特に高度なフレームワークや新しく珍しい言語をマスターすることは、実際には問題ではありません。時間を過ごしたい、誰もがそう思います。したがって、基本的なもの、つまりアルゴリズムとデータ構造、そして優れた設計パターンが特に重要です。

シングルケースモード

シングルトンモードの特徴

  • $_instanceは静的プライベート変数として宣言する必要があります

  • コンストラクターとクローン関数はプライベートとして宣言する必要がありますこれは、外部プログラムがシングルトンを失うことを防ぐためです。例のパターンの意味

  • getInstance() メソッドは public として宣言する必要があり、一意のインスタンスへの参照を返すためにこのメソッドを呼び出す必要があります

  • ::operator は静的変数にのみアクセスできます。または静的関数

  • PHP PHP の解釈および実行メカニズムにより、各 PHP ページが解釈および実行された後にすべての関連リソースがリサイクルされるため、シングルトン モードは相対的です。

<?php
header("Content-type: text/html; charset=utf-8");
    class single{
        public static $arr=array(&#39;host&#39;=>&#39;XXX&#39;,&#39;user&#39;=>&#39;XXX&#39;,&#39;password&#39;=>&#39;XXX&#39;);
        private static $_instance =null;
        private function __construct(){}
        private function __clone(){}
        static public function getInstance(){
            if(self::$_instance== null || isset(self::$_instance)){
                self::$_instance= new self;
            }
                return self::$_instance;   
        }
        public function showSomething(){
            return self::$arr;
        }
    }
    /////////////////////test///////////////
    $a=single::getInstance();
    print_r(single::getInstance()->showSomething());
?>
ログイン後にコピー

ファクトリ パターン

ファクトリ クラスは、他のオブジェクトを作成するために特別に使用されるクラスです。ファクトリ クラスは、ポリモーフィック プログラミングの実践において非常に重要です。これにより、クラスの動的な置換や構成の変更が可能になり、アプリケーションがより柔軟になります。ファクトリ パターンを習得することは Web 開発にとって不可欠です。
特徴:

ファクトリ パターンは通常、インターフェイスに似たさまざまなクラスを返すために使用されます。ファクトリの一般的な用途は、多態性プロバイダーを作成することです。

通常、ファクトリ パターンにはキー構造があり、これは一般にファクトリという名前の静的メソッドです。この静的メソッドは任意の数のパラメータを受け入れることができ、オブジェクトを返す必要があります。

ファクトリ パターンはさらに次のように分類されます:

シンプル ファクトリ

ファクトリ メソッド

抽象ファクトリ
シンプル ファクトリ パターン: 同じ階層構造で任意の製品を生産するために使用されます。新しい製品の追加については何もできません

ファクトリー モード: 同じ階層構造で固定された製品を生産するために使用されます。 (任意の製品の追加をサポート)

抽象ファクトリー: さまざまな製品ファミリーのすべての製品を生産するために使用されます。 (新しい製品の追加については何もできません。製品ファミリーの追加をサポートしてください)

<?php
//简单工厂模式
header("Content-type: text/html; charset=utf-8");
class simpale{
    public function calculate($num1,$num2,$operator){
                try {
                    $result=0;
                    switch ($operator){
                        case &#39;+&#39;:
                            $result= $num1+$num2;
                            break;
                        case &#39;-&#39;:
                            $result= $num1-$num2;
                            break;
                        case &#39;*&#39;:
                            $result= $num1*$num2;
                            break;
                        case &#39;/&#39;:
                            if ($num2==0) {
                                throw new Exception("除数不能为0");
                            }
                            $result= $num1/$num2;
                            break;
                    }
                return $result;
                }
                catch (Exception $e){
                    echo "您输入有误:".$e->getMessage();
               }
            }
}
//工厂方法模式
    interface  people {
            function  jiehun();
    }
    //定义接口
    class man implements people{
        public $ring=null;
        public $car=null;
        public $house=null;
        public function getAllthing(){
            $this->ring=&#39;10000&#39;;
            $this->car=&#39;100000&#39;;
            $this->house=&#39;1000000&#39;;
        }
        public function jiehun() {
            if($this->ring && $this->car && $this->house)
                        echo &#39;我可以结婚了<br>&#39;;
                    else
                        echo &#39;我是臭屌丝,还不能结婚<br>&#39;;
        }
    }
    class women implements people {
        public $face=&#39;ugly&#39;;
        public function getAllthing(){
            $this->face=&#39;nice&#39;;
        }
          public function jiehun() {
                    if($this->face ==&#39;nice&#39;)
                        echo &#39;我可以结婚了<br>&#39;;
                    else
                        echo &#39;我是臭屌丝,还不能结婚<br>&#39;;
            }
    }
    interface  createpeople { 
        // 注意了,这里是工厂模式本质区别所在,将对象的创建抽象成一个接口。
          public function create();
    }
    class FactoryMan implements createpeople{
          public  function create() {
                    return  new man;
            }
    }
    class FactoryWomen implements createpeople {
           public function create() {
                    return new women;
            }
    }
    class  Client {
        // 简单工厂里的静态方法
            public function test() {
                $Factory =  new  FactoryMan;
                $man = $Factory->create();
                $man->jiehun();
                $Factory =  new  FactoryWomen;
                $woman = $Factory->create();
                $woman->getAllthing();
                $woman->jiehun();
            }
    }
/////////////test////////////
    $f = new Client;
    $f->test();
//抽象模式就是在工厂模式下接口中添加相应的不同方法即可
?>
ログイン後にコピー

戦略パターン

戦略パターンはオブジェクトの動作パターンであり、一連のアルゴリズムをカプセル化することを目的としています。必要なアルゴリズムを動的に選択して使用します。
戦略パターンとは、プログラムにおける意思決定制御に関わるパターンを指します。この設計パターン自体の核となるアイデアはオブジェクト指向プログラミングのポリモーフィックなアイデアであるため、戦略パターンは非常に強力です。
戦略パターンの 3 つの特徴:

抽象ロール クラスの定義 (実装ごとに共通の抽象メソッドを定義)

特定の戦略クラスの定義 (親クラスの共通メソッドを具体的に実装)

環境ロール クラスの定義 (プライベート化された宣言の抽象化) ロール変数、オーバーロードされたコンストラクター メソッド、抽象メソッドの実行)

<?php
abstract class baseAgent { //抽象策略类
        abstract function PrintPage();
    }
    //用于客户端是IE时调用的类(环境角色)
    class ieAgent extends baseAgent {
        function PrintPage() {
            return &#39;IE&#39;;
        }
    }
    //用于客户端不是IE时调用的类(环境角色)
    class otherAgent extends baseAgent {
        function PrintPage() {
            return &#39;not IE&#39;;
        }
    }
    class Browser {
    //具体策略角色
        public function call($object) {
            return $object->PrintPage ();
        }
    }
///////////////test////////////////
    $bro = new Browser ();
    echo $bro->call (new ieAgent );
ログイン後にコピー

関連する推奨事項:

PHP デザイン パターンの組み合わせパターンとケースの共有

一般的な PHP デザイン パターンの共有

PHP で一般的に使用されるデザイン パターン 概要と使用例

以上がさまざまな PHP 設計パターンの簡単な実践例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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

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

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

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

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

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

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

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

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

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

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

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

See all articles