目次
ネストされたIFを置き換えるのはなぜですか?
戦略パターンとは何ですか?
戦略パターンでリファクタリングします
1。戦略インターフェイスを定義します
2。具体的な戦略を作成します
3.コンテキストまたはリゾルバを使用します
4。きれいに使用します
現代のPHPの利点
いつ使用するか
最終的な考え
ホームページ バックエンド開発 PHPチュートリアル ネストされたIFを最新のPHPの戦略パターンに置き換える

ネストされたIFを最新のPHPの戦略パターンに置き換える

Aug 07, 2025 pm 10:44 PM
PHP Nested if Statement

NestedのIF PHPのステートメントを置き換えるには、ポリシーパターンを使用する必要があります。1。ポリシーインターフェイスを定義します。 2。特定のポリシークラスを作成します。 3.コンテキストクラスを使用してポリシーを管理します。 4.タイプの選択と実行を通じて、対応するポリシーを選択して実行し、それにより、コードの保守性、テスト可能性、スケーラビリティを改善し、最終的に明確で分離されたデザインを達成します。

ネストされたIFを最新のPHPの戦略パターンに置き換える

PHPコードがパイプラインを開始すると、特にタイプ、ステータス、またはユーザーの役割に基づいて決定を下している場合、深くネストされたifまたはelseifステートメントでパイプラインを開始すると、コードが読み取り、テスト、維持が難しくなっていることを明確にします。これをきれいにする強力な方法の1つは、それらのネストされた条件を戦略パターンに置き換えることです。

ネストされたIFを最新のPHPの戦略パターンに置き換える

現代のPHPでこれをどのように、そしてなぜ行うのかを歩きましょう。


ネストされたIFを置き換えるのはなぜですか?

声明がしばしば次のように見えるifネストされています:

ネストされたIFを最新のPHPの戦略パターンに置き換える
関数CalculateShipping($ order){
    if($ order-> type === 'Standard'){
        if($ order-> weight <= 5){
            5.00を返します。
        } elseif($ order-> weight <= 10){
            10.00を返します。
        } それ以外 {
            15.00を返します。
        }
    } elseif($ order-> type === &#39;express&#39;){
        if($ order-> weight <= 5){
            15.00を返します。
        } elseif($ order-> weight <= 10){
            25.00を返します。
        } それ以外 {
            返品40.00;
        }
    }
    // ...その他の条件
}

これは乱雑になります。オープン/クローズド原理(OCP)に違反し、テストが困難で、新しい配送タイプを追加することが雑用になります。

戦略パターンは、各アルゴリズム(または動作)を独自のクラスにカプセル化することで役立ち、それらを簡単に交換できるようにします。

ネストされたIFを最新のPHPの戦略パターンに置き換える

戦略パターンとは何ですか?

戦略パターンは、アルゴリズムのファミリーを定義し、それぞれをカプセル化し、それらを交換可能にします。コンテキスト(たとえば、出荷計算機など)は、内部の詳細を知らずに戦略を使用します。

PHPでは、これには次のことが含まれます。

  • 戦略インターフェイス
  • 複数のコンクリート戦略クラス
  • 選択した戦略を使用するコンテキスト

戦略パターンでリファクタリングします

1。戦略インターフェイスを定義します

インターフェイスShippingstrategy {
    パブリック関数計算(フロート$ weight):float;
}

2。具体的な戦略を作成します

クラスの標準シッピングを実装したShippingstrategy {
    パブリック関数計算(float $ weight):float {
        $ weight <= 5を返しますか? 5.00:($ weight <= 10?10.00:15.00);
    }
}

クラスエクスプレスシッピングはShippingstrategyを実装しています{
    パブリック関数計算(float $ weight):float {
        $ weight <= 5を返しますか? 15.00:($ weight <= 10?25.00:40.00);
    }
}

さらに進んで、重みのロジックを別々の戦略に分解するか、構成を使用することもできますが、これにより簡単になります。

3.コンテキストまたはリゾルバを使用します

クラスShippingCalculator {
    プライベート配列$戦略。

    パブリック関数__construct(){
        $ this-> strategies = [
            &#39;Standard&#39; => new StandardShipping()、
            &#39;Express&#39; => new ExpressShipping()、
        ];
    }

    パブリック関数計算(String $ Type、Float $ weight):float {
        if(!sisset($ this-> strategies [$ type])){
            新しいInvalidargumentException( "不明な配送タイプ:$ type");
        }

        return $ this-> strategies [$ type]  - > calculate($ weight);
    }
}

4。きれいに使用します

$ calculator = new ShippingCalculator();
$ cost = $ calculator-> calculate( &#39;express&#39;、7); // 25.00を返します

s ifもうネストされていません。きれいで読みやすい通話。


現代のPHPの利点

PHP 8で戦略パターンを使用すると、いくつかの利点があります。

  • タイプの安全性:インターフェイスと厳格なタイピングを使用すると、早期にエラーをキャッチします。
  • テスト可能性:各戦略は単独でテストできます。
  • 拡張性:新しい配送方法を追加しますか?新しいクラスを作成して登録するだけです。
  • 読みやすさif/elseの10レベルを通過することはもうありません。
  • DIとの統合:依存関係噴射コンテナ(LaravelまたはSymfonyなど)を介して戦略を注入できます。

たとえば、Laravelでは、サービスプロバイダーに戦略をバインドする場合があります。

 $ this-> app-> bind(shippingstrategy :: class。 &#39;_express&#39;、fn()=> new ExpressShipping());

または、構成駆動型の登録を備えた戦略工場を使用します。


いつ使用するか

あなたが見るとき、戦略パターンを考慮してください:

  • タイプまたはモードに基づく複数の条件
  • 繰り返しswitchまたはif-elseifブロック
  • 分岐のためにテストするのが難しいコード
  • 変更または拡張する可能性のあるビジネスルール

2つの単純なブランチではやり過ぎですが、3つのバリエーションがあるか、成長を期待すると輝いています。


最終的な考え

ネストされた声明を戦略パターンに置き換えるif 、次のコードにつながります。

  • より維持可能
  • テストが簡単です
  • より簡単に拡張します

現代のPHPでは、名前空間、オートローディング、強力なOOPサポートを備えているため、このパターンは自然にアーキテクチャに適合します。

それを使用するためにフレームワークは必要ありません。少し先見の明と、きれいなデザインへのコミットメントだけです。

基本的に、 ifチェーンがあなたを横にスクロールさせている場合、それは戦略の時です。

以上がネストされたIFを最新のPHPの戦略パターンに置き換えるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

コントロールフローのアーキテクチャ:PHPでネストされたIFを使用(および回避する)時期 コントロールフローのアーキテクチャ:PHPでネストされたIFを使用(および回避する)時期 Jul 31, 2025 pm 12:42 PM

nestedifstatementsArecocecepable inphpは、heydeylogicalhierararchies、sudasguardclauseswith clearreallyexits、階層的ビューズのlog、orshallownesting(1–2levels)、becauseeteyenhanceclarityandmaintinflow.2.epednesting(3レベル)、deepnesting(3レベル)、

矢印コードからクリーンコードまで:ネストされたifsを簡素化するための戦略 矢印コードからクリーンコードまで:ネストされたifsを簡素化するための戦略 Jul 30, 2025 am 05:40 AM

ネストされたIFステートメントの複雑さを排除するには、Guard句を使用して事前に戻り、条件付き式をマージし、ブランチを多型またはポリシーパターンに置き換え、ルックアップテーブルマッピング値を使用する必要があります。 1.ガード句を使用して、事前に境界条件を処理して終了します。 2。論理操作を使用して、関連する条件を満たします。 3.多型またはポリシーパターンを使用して、複雑な型ブランチを置き換えます。 4.辞書およびその他のデータ構造を使用して、単純な条件付きマッピングを置き換えます。最終的にコードをフラットで線形にし、読みやすさと保守性を向上させます。

DOOMのピラミッドを飼いならす:PHPでの声明の場合はネストされたリファクタリング DOOMのピラミッドを飼いならす:PHPでの声明の場合はネストされたリファクタリング Aug 01, 2025 am 12:33 AM

PHPでのネストされた声明によってネストされた「死のピラミッド」問題を解決するには、次の5つの再構成方法を採用する必要があります。1。条件チェックを平らにして、深い巣を避けるために早期リターン(GuardClauses)を使用する必要があります。 2.読みやすさと再利用性を向上させるために、明確な名前を持つ複雑な条件をプライベートメソッドに抽出します。 3.複雑なプロセスに検証オブジェクトまたはミドルウェアモードを使用して、構成可能で拡張可能な検証ロジックを実現します。 4.ネストされた三元表現を避けるために、単純なシナリオでのみ、三元または空のマージオペレーターを使用します。 5。例外を使用して、エラー文字列の返品を置き換え、集中的な方法でエラーを処理し、コアロジックを純粋に保ちます。究極の目標は、コードをより安全でテストしやすく、迅速な障害、論理的分離、適切な設計パターンを通じて維持しやすくすることです。

PHPガード条項:ネストされた場合の優れた代替手段 PHPガード条項:ネストされた場合の優れた代替手段 Jul 31, 2025 pm 12:45 PM

guardclauseSaReasuerasueralternativeToNestemention inphpbecausEtheTeyceComplexity byhandlingpreconditionsearly.1)それらを採用することを繰り返し担当する可能性を促進します

隠されたコスト:深くネストされたPHP条件のパフォーマンスへの影響 隠されたコスト:深くネストされたPHP条件のパフォーマンスへの影響 Jul 30, 2025 am 05:37 AM

deeplynestedconditionalsIncognitiveLoadanddebuggingtime、MakeCodehardertunderStandand andMaintain; refactoring withearlyrysandguardclausessimplifiesflow.2.poorscalisabilityAriseasivasionasmasasmoceSasmocecomplicatecpubububurnanchdiction

コードの臭いとしてネストされたIFS:過度に複雑なロジックを識別して修正する コードの臭いとしてネストされたIFS:過度に複雑なロジックを識別して修正する Aug 01, 2025 am 07:46 AM

deeplynestededementseduceReadadyandincedinitecognitiveLoad、makecodehardertodebugandtest.2.theyoftenviolatetheSinsinesponsibilityprinciplebingingmultipreconconsinsonefunction.3.guardclausesswitherlyrussscansscanltenlogimcandimproveclation

ネストされたIF-ELSE構造を使用した効果的なエラー処理と検証 ネストされたIF-ELSE構造を使用した効果的なエラー処理と検証 Jul 31, 2025 am 11:59 AM

deeplynestedif-elseblocksuducodereadability andmaintainability;

デバッグ地獄:構造の場合はネストされた複雑なネストをナビゲートして固定します デバッグ地獄:構造の場合はネストされた複雑なネストをナビゲートして固定します Aug 01, 2025 am 07:33 AM

usearlylylylylylylyrytoflattennestededifstructures andimprovereadability byhandlingedgecasesfirst.2.extractcomplexconditionsintodedesivebooleanvariablestomakelogicself-documenting.3.Replacerole-orortype BasedConditionalStrigutiptablestablestablestables

See all articles