PHP IF-Bedingungen mit übersichtlicher Prüfung

In vielen Situationen ist es oft unübersichtlich, wenn sehr viele Bedingungen abgearbeitet werden müssen, um einen Zustand zu prüfen. Das betrifft vor allem die Prüfung auf Validität. Sind alle Bedingungen erfüllt, wird die Validität bestätigt.

Um nicht für jede Bedingung eine eigene IF-Abfrage zu implementieren, teile ich die Bedingungen auf und prüfe immer die einzelnen Aspekte auf true. Wenn eine Bedingung nicht erfüllt sein darf wird negiert geprüft.

Ziel ist es, die Schlüssel des Array auf true zu prüfen, um letztlich die Gesamtbedingungen als true zu erreichen. D.h. dann, sobald ein Wert false ist, wird der Fehlschlag einer Validität bemerkt. Sollte z.B. false als Teil der Bedingung notwendig sein wird negiert. In Worten könnte man auch sagen: "Wenn nicht .. dann richtig" oder so.

Vorteile dieses Verfahren sind:

  • es muss nur noch zentral geprüft werden, ob alle Werte true sind
  • es wird nur eine IF-Bedinung zentral angewendet
  • jede Einzelbedigung lässt sich sehr übersichtlich und atomar bearbeiten
  • Das Zusammenfassen als Array erlaubt:
    • sofortige Übersicht
    • das einmalige prüfen der Gesamtbedingung
    • das komfortable Debugging, falls Prüfungen nicht schlüssig sind

( so kann z.B. nur durch Ausgabe des Arrays, hier $Gegenstand, einzeln nachgesehen werden wo ein Fehler auftrat um Ihn dann an dieser Stelle zu bearbeiten )

Das Zusammenfassen zu "sprechenden" Namen, wie z.B. der Schlüssel, sorgt für mehr Klarheit. So kann man Teilbedienungen auch aus abstrakteren Ausdrücken erstellen. Wenn sehr viele IF-Ausdrücke zusammenkommen, sollte man immer versuchen logische Einheiten zu bilden und eine Hierarchie aufbauen.

Im Folgenden ist ein konstruiertes Beispiel um das Vorgehen zu verdeutlichen:

# Möglicher Zustand
$objekt_zustaende   = [
  "Farbe"   => "rot",
  "Groesse" => 3,
  "Name"    => "Kugel" 
];
  
# Beginn der Prüfroutine  
$Gegenstand                  = array();

# Validitätsbedingungen
$Gegenstand[ 'is_rot' ]     = ( $objekt_zustaende["Farbe"]   === "rot" )   ? true : false;
$Gegenstand[ 'is_gross' ]   = ( $objekt_zustaende["Groesse"] === 3 )       ? true : false;
$Gegenstand[ 'is_Kugel' ]   = ( $objekt_zustaende["Name"]    === "Kugel" ) ? true : false;

# Debugging
print_r( $Gegenstand );

# Validität erfüllt ?
if( in_array( false , $Gegenstand , true ) === true ) {
    echo "Bedingung nicht erfüllt!";
} else {
    echo "Bedingung erfüllt!";
}


Zum selber testen und bearbeiten: