


Jenseits der Verschachtelung: Alternativen zu tiefen IF-ELSE-Strukturen in PHP
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.
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.

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:

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.

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!

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

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

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.

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

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.

DEFLYNETED CONDITIONALINSCREASECOGNITIVETULOWADDEBUGGGINGTIME, MAKECODEHARDERTOUNDANDANTANDANTAIN

DeeplyNestedIfStatementsReducereadability undIncreaScognitivitivitoWoad, MakingCodeHardertodeBugandTest.2.TheyoftenviolatethesingleerePonsibilityPrincipbingCombiningMultipleConconconCernsinoneFunction

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

UsearlyReturnstoflatttennestifrikturesandimproperadabilityByHandlingedgeCaseSfirst.2.extractComplexConditionStodescriptiveBooleVariabomakelogicsFexcumenting-Documenting
