Inhaltsverzeichnis
2. Strategiemuster: Ersetzen Sie die Bedingungen durch Klassen
3. Suchtische und Arrays für einfache Zuordnungen
4. Polymorphismus: Lassen Sie Objekte ihr Verhalten entscheiden
5. Status- oder Befehlsmuster für komplexe Workflows
Bonus: Verwenden Sie match Expressions (Php 8)
Heim Backend-Entwicklung PHP-Tutorial Jenseits der Verschachtelung: Alternativen zu tiefen IF-ELSE-Strukturen in PHP

Jenseits der Verschachtelung: Alternativen zu tiefen IF-ELSE-Strukturen in PHP

Aug 01, 2025 am 07:41 AM
PHP Nested if Statement

Verwenden Sie Wachklauseln, um früh zu verlassen und die Verschachtelung zu reduzieren. 2. Wenden Sie das Strategiemuster an, um die Bedingungen durch Klassen oder Anruflinge zu ersetzen. 3.. Ersetzen Sie einfache Zuordnungen durch Suchtische oder Arrays; 4. Verwenden Sie Polymorphismus, damit Objekte ihr Verhalten entscheiden; 5. Verwenden Sie Status- oder Befehlsmuster für komplexe Workflows; Verwenden Sie außerdem PHP 8 -Übereinstimmung mit Ausdrücken für die sauberere bedingte Logik - diese Techniken verflachen den Code zusammen, verbessern die Lesbarkeit und verbessern die Wartbarkeit, indem die Bedingungen aus der Hauptlogik bewegt werden.

Jenseits der Verschachtelung: Alternativen zu tiefen IF-ELSE-Strukturen in PHP

Wenn der PHP-Code mit tiefen If-Else-Blöcken häuft, ist es schwer zu lesen, zu testen und zu warten. Während Verschachtelungsbedingungen üblich sind, gibt es sauberere, skalierbare Alternativen. Hier erfahren Sie, wie Sie sich von der If-Else-Pyramide befreien können, ohne die Klarheit der Logik zu beeinträchtigen.

Jenseits der Verschachtelung: Alternativen zu tiefen IF-ELSE-Strukturen in PHP

1. Wachklauseln: frühzeitig verlassen, das Verschachteln reduzieren

Eine der einfachsten und aber effektivsten Techniken ist die Verwendung von Schutzklauseln - frühe Renditen, die zu Beginn einer Funktion Randfälle oder ungültige Zustände verarbeiten.

Anstatt:

Jenseits der Verschachtelung: Alternativen zu tiefen IF-ELSE-Strukturen in PHP
 Funktionsprozessuser ($ user) {
    if ($ user! == null) {
        if ($ user-> isActive ()) {
            if ($ user-> HaSpermission ()) {
                // Hauptlogik hier
                $ this-> sendWelcomeMail ($ user) zurückgeben;
            }
        }
    }
    false zurückgeben;
}

Refaktor mit frühen Ausgängen:

 Funktionsprozessuser ($ user) {
    if ($ user === null) return false;
    if (! $ user-> isActive ()) return false;
    if (! $ user-> HaSpermission ()) return false;

    $ this-> sendWelcomeMail ($ user) zurückgeben;
}

Dies hält die Hauptlogik auf der oberen Ebene und erleichtert die Funktion.

Jenseits der Verschachtelung: Alternativen zu tiefen IF-ELSE-Strukturen in PHP

2. Strategiemuster: Ersetzen Sie die Bedingungen durch Klassen

Wenn Sie zwischen mehreren Verhaltensweisen basierend auf einem Typ oder Status wählen, ersetzt das Strategiemuster lange IF-ELSE-Ketten durch eine Karte von Klassen oder Anrufleuten.

Zum Beispiel statt:

 Funktion Calculatetax ($ Country, $ Betrag) {
    if ($ Country === 'us') {
        Return $ Betrag * 0,07;
    } elseif ($ country === 'DE') {
        Return $ Betrag * 0,19;
    } elseif ($ country === 'jp') {
        Return $ Betrag * 0,10;
    }
    Rückkehr 0;
}

Verwenden Sie eine Strategiekarte:

 $ tax Strategien = [
    'Us' => fn ($ betragen) => $ betragen * 0,07,
    'De' => fn ($ betragen) => $ betragen * 0,19,
    'Jp' => fn ($ betragen) => $ betragen * 0,10,
];

Funktion Calculatetax ($ Country, $ Betrag, $ Strategien) {
    Return $ Strategies [$ Country] ($ Betrag)? 0;
}

Oder gehen Sie weiter mit dedizierten Klassen, die eine TaxStrategy -Schnittstelle für eine bessere Trennung und Testbarkeit implementieren.


3. Suchtische und Arrays für einfache Zuordnungen

Viele IF-ELSE-Leitern sind nur Schlüssel-Wert-Zuordnungen. Ersetzen Sie sie durch Arrays.

Anstatt:

 Funktion getStatuscolor ($ status) {
    if ($ status === 'active') {
        zurück 'grün';
    } elseif ($ status === 'ausstehend') {
        zurück 'gelb';
    } elseif ($ status === 'inaktiv') {
        zurück 'grau';
    } elseif ($ status === 'blockiert') {
        zurück 'rot';
    }
    zurück "unbekannt";
}

Verwenden Sie eine Suche:

 Funktion getStatuscolor ($ status) {
    $ colors = [
        'aktiv' => 'grün',
        'ausstehend' => 'Gelb',
        'inaktiv' => 'grau',
        'blockiert' => 'rot' '
    ];

    $ farben zurückgeben [$ status] ?? 'unbekannt';
}

Es ist schneller, sauberer und leichter zu erweitern oder sogar von der Konfiguration zu laden.


4. Polymorphismus: Lassen Sie Objekte ihr Verhalten entscheiden

Wenn Ihre Bedingungen von Objekttypen abhängen, verwenden Sie den Polymorphismus . Definieren Sie eine Methode in einer Basisklasse oder Schnittstelle und lassen Sie Unterklassen eine eigene Version implementieren.

Beispiel:

 Schnittstellenbenachrichtigung {
    öffentliche Funktion senden ($ message);
}

Klasse E -MailNotification implementiert eine Benachrichtigung {
    Öffentliche Funktion senden ($ message) { / * per E -Mail senden * /}
}

Klasse SMSNotification implementiert eine Benachrichtigung {
    öffentliche Funktion send ($ message) { / * über SMS * /} senden
}

// Nein, wenn-ELSE benötigt
Funktion Benachrichtigung (Benutzer $ Benutzer, Benachrichtigung $ Channel, $ msg) {
    $ kanal-> send ($ msg);
}

Jetzt ist die Entscheidung, wie man Senden sendet, verkapselt - keine Bedingungen für die Anrufe erforderlich.


5. Status- oder Befehlsmuster für komplexe Workflows

Betrachten Sie für komplexe Geschäftsregeln, die sich auf dem Staat ändern, das Statusmuster oder das Befehlsmuster . Diese ermöglichen es Ihnen, Verhalten und Übergänge ohne weitläufige Bedingungen zu verkapulieren.

Beispielsweise kann eine Reihenfolge, die sich beim Auslegen, Versand oder Stornieren anders verhält, ihre eigenen Zustandsobjekte haben, die gültige Aktionen definieren.

Verwenden Sie alternativ eine Befehlskarte :

 $ actions = [
    'create' => new CreateorderHandler (),
    'Cancel' => New CancelOrderHandler (),
    'Rückerstattung' => Neue Rückerstattung (),
];

$ Handler = $ Actionen [$ Command] ?? neue InvalidCommandException () werfen;
$ handler-> execute ($ data);

Dies vermeidet lange Schalter/Ifblöcke beim Routing -Befehl.


Bonus: Verwenden Sie match Expressions (Php 8)

PHP 8- match ist eine sauberere Alternative zum switch und kann häufig IF-ELSE-Ketten ersetzen:

 $ status = 'aktiv';

$ label = match ($ status) {
    'active' => 'aktiver Benutzer',
    'anhängig' => 'Ausstehende Genehmigung',
    'inaktiv' => 'inaktiv',
    Standard => 'Unbekannter Status'
};

Es ist expressionsbasiert, Typ-Safe und erfordert keine break Aussagen.


Der Schlüssel ist nicht, Bedingungen vollständig zu beseitigen - sie sind notwendig -, sondern sie aus Ihrer Hauptlogik herauszuholen . Verwenden Sie frühzeitige Renditen, Datenstrukturen und objektorientierte Muster, um Ihren Code flach, lesbar und für die Erweiterung zu öffnen.

Grundsätzlich: Wenn Sie eine tiefe Verschachtelung sehen, fragen Sie sich: Kann dies eine Karte, eine Methode oder eine Rückkehr sein? Oft lautet die Antwort ja.

Das obige ist der detaillierte Inhalt vonJenseits der Verschachtelung: Alternativen zu tiefen IF-ELSE-Strukturen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP-Tutorial
1511
276
Architektierungssteuerungsfluss: Wann ist verschachtelte IFs in PHP verwendet (und vermeiden) Architektierungssteuerungsfluss: Wann ist verschachtelte IFs in PHP verwendet (und vermeiden) Jul 31, 2025 pm 12:42 PM

NestedIfStatementsAracceptableInphpwhentheyreflectlogicalHierarchies, suchasguardclausses witclearlyexits, hierarchicalbusinessLogic, Orshallownesting (1–2 -Levels), Becausetheyenhanceclarity und und Unabhängigkeit, Unabhängigkeit, a

Vom Arrow -Code zu Clean Code: Strategien zur Vereinfachung verschachtelter IFs Vom Arrow -Code zu Clean Code: Strategien zur Vereinfachung verschachtelter IFs Jul 30, 2025 am 05:40 AM

Um die Komplexität von verschachtelten Angaben zu beseitigen, sollten Sie die Schutzklausel verwenden, um im Voraus zurückzukehren, bedingte Ausdrücke zusammenzuführen, Zweige durch polymorphe oder politische Muster zu ersetzen und die Zuordnungswerte für die Suchentabelle zu verwenden. 1. Verwenden Sie die Schutzklausel, um die Randbedingungen im Voraus zu verarbeiten und zu beenden. 2. Verwenden Sie logische Operationen, um und verwandte Bedingungen zu erfüllen. 3. Verwenden Sie polymorphe oder politische Muster, um komplexe Zweige zu ersetzen. 4. Verwenden Sie Wörterbücher und andere Datenstrukturen, um die einfache bedingte Zuordnung zu ersetzen. Machen Sie den Code letztendlich flach und linear und verbessern Sie die Lesbarkeit und Wartbarkeit.

PHP Guard -Klauseln: Die überlegene Alternative zu verschachtelten Ifs -Aussagen PHP Guard -Klauseln: Die überlegene Alternative zu verschachtelten Ifs -Aussagen Jul 31, 2025 pm 12:45 PM

GuardClausSesAreaSuperioralternativetonestedIfstatementSinphpbecausetheyrecomplexityByhandlingPreconditionSear.) Sie werden intensivitätsbyeliminatingDepnesting und KeepingthemainlogicatthebaseIndentationLevel.2) jeder GuardclaussexplyClauclyClauclyClauclyClauclyClauclyClauclyClyClauclyclyClauclyclyClauclyClauclyClauclyckkkkkkkkkkkkkkkkkkkkkkkkkks

Zähmung der Pyramide des Untergang Zähmung der Pyramide des Untergang Aug 01, 2025 am 12:33 AM

Um das durch verschachtelte "Todespyramiden" verursachte Problem zu lösen, sollten die folgenden fünf Rekonstruktionsmethoden angewendet werden: 1. Frühe Rückkehr (Guardclausses) verwenden, um die Bedingungsprüfung zu verflachten, um eine tiefe Verschachtelung zu vermeiden; 2. extrahieren komplexe Bedingungen in eine private Methode mit klaren Namen, um die Lesbarkeit und Wiederverwendbarkeit zu verbessern. 3.. Verwenden Sie Überprüfungsobjekte oder Middleware -Modus für komplexe Prozesse, um eine komponierbare und erweiterbare Überprüfungslogik zu erreichen. 4. Verwenden Sie ternäre oder leere Zusammenführungsoperatoren nur in einfachen Szenarien, um verschachtelte ternäre Ausdrücke zu vermeiden. 5. Verwenden Sie Ausnahmen, um die Rückgabe der Fehlerzeichenfolge zu ersetzen, Fehler auf zentralisierte Weise zu behandeln und die Kernlogik rein zu halten. Das ultimative Ziel ist es, den Code sicherer, leichter zu testen und durch ein schnelles Versagen, logische Trennung und geeignete Entwurfsmuster einfacher zu halten.

Die versteckten Kosten: Leistung Implikationen von tief verschachtelten PHP -Bedingungen Die versteckten Kosten: Leistung Implikationen von tief verschachtelten PHP -Bedingungen Jul 30, 2025 am 05:37 AM

DEFLYNETED CONDITIONALINSCREASECOGNITIVETULOWADDEBUGGGINGTIME, MAKECODEHARDERTOUNDANDANTANDANTAIN

Verschachtelte IFs als Codegeruch: Identifizierung und Behebung übermäßig komplexer Logik Verschachtelte IFs als Codegeruch: Identifizierung und Behebung übermäßig komplexer Logik Aug 01, 2025 am 07:46 AM

DeeplyNestedIfStatementsReducereadability undIncreaScognitivitivitoWoad, MakingCodeHardertodeBugandTest.2.TheyoftenviolatethesingleerePonsibilityPrincipbingCombiningMultipleConconconCernsinoneFunction

Effektive Fehlerbehandlung und Validierung mit verschachtelten IF-ELSE-Strukturen Effektive Fehlerbehandlung und Validierung mit verschachtelten IF-ELSE-Strukturen Jul 31, 2025 am 11:59 AM

Tiefedif-elsblocksredeCodereadability undMaintainability; 2. UsearlyReturns (Guardclausses) ToflattenlogicandimProveclarity; 3.CentralizevalidationWithresultObjectStoSeparateConconconconcorsandSimplifytestinging;

Hölle debuggen: Navigieren und Fixieren des Komplexes verschachtelte If -Strukturen Hölle debuggen: Navigieren und Fixieren des Komplexes verschachtelte If -Strukturen Aug 01, 2025 am 07:33 AM

UsearlyReturnstoflatttennestifrikturesandimproperadabilityByHandlingedgeCaseSfirst.2.extractComplexConditionStodescriptiveBooleVariabomakelogicsFexcumenting-Documenting

See all articles