Modul 295


Backend für Applikationen realisieren

Web Icon

03 - Operatoren, Ausdrücke und Bedingungen


Rechnen, Vergleichen und Entscheiden in PHP

PHP Logo

Lernziele dieser Lektion

  • Arithmetische, Zuweisungs- und Vergleichsoperatoren anwenden können
  • Inkrement-/Dekrement- sowie logische Operatoren einsetzen können
  • Die Auswertungsreihenfolge (Operatorrangfolge) einschätzen können
  • Bedingungen mit if, elseif und else formulieren können
  • Mehrfachverzweigungen mit switch umsetzen können
  • Den ternären und den Null-Coalescing-Operator gezielt einsetzen können

Rückblick: Vergleichsoperatoren

  • == vergleicht nur den Wert, === vergleicht Wert und Typ
  • Faustregel: möglichst immer === verwenden
                    
                        <?php
                        var_dump("10" == 10);   // bool(true)
                        var_dump("10" === 10);  // bool(false)
                    
                

Was ist ein Ausdruck?

  • Ein Ausdruck (Expression) ist alles, was zu einem Wert ausgewertet werden kann
  • Operatoren verknüpfen Werte und Variablen zu neuen Ausdrücken
                    
                        <?php
                        3 + 4          // Ausdruck -> 7
                        $age >= 18     // Ausdruck -> bool
                        "Hallo " . $name // Ausdruck -> string
                    
                

Arithmetische Operatoren

+ Addition
- Subtraktion
* Multiplikation
/ Division
% Modulo (Rest der Division)
** Potenz
                    
                        <?php
                        echo 10 % 3; // 1
                        echo 2 ** 3; // 8
                    
                

Zuweisungsoperatoren

Kombinierte Zuweisungsoperatoren verknüpfen eine Rechenoperation direkt mit der Zuweisung.

                    
                        <?php
                        $total = 10;
                        $total += 5;  // $total = $total + 5;  -> 15
                        $total -= 2;  // $total = $total - 2;  -> 13
                        $total *= 3;  // $total = $total * 3;  -> 39
                        $total /= 3;  // $total = $total / 3;  -> 13

                        $name = "Anna";
                        $name .= " Muster"; // Konkatenation & Zuweisung
                    
                

Inkrement- und Dekrement-Operatoren

++ und -- erhöhen bzw. verringern eine Variable um 1.

                    
                        <?php
                        $count = 5;

                        $count++; // Post-Inkrement, entspricht $count += 1;
                        echo $count; // 6

                        $count--; // Post-Dekrement
                        echo $count; // 5
                    
                

Es gibt auch die Pre-Varianten ++$count / --$count - der Unterschied zeigt sich erst, wenn der Ausdruck direkt weiterverwendet wird.

Vergleichsoperatoren im Überblick

== / === Gleich / Identisch
!= / !== Ungleich / Nicht identisch
< > <= >= Kleiner, grösser, kleiner/gleich, grösser/gleich
<=> Spaceship-Operator
                    
                        <?php
                        echo 3 <=> 5; // -1 (kleiner)
                        echo 5 <=> 5; //  0 (gleich)
                        echo 7 <=> 5; //  1 (grösser)
                    
                

Logische Operatoren

&& Und (beide Bedingungen müssen zutreffen)
|| Oder (mind. eine Bedingung muss zutreffen)
! Nicht (kehrt den Wahrheitswert um)
                    
                        <?php
                        $age = 20;
                        $hasTicket = true;

                        var_dump($age >= 18 && $hasTicket); // bool(true)
                        var_dump($age < 18 || !$hasTicket); // bool(false)
                    
                

Kurzschlussauswertung (Short-Circuit)

  • PHP wertet logische Ausdrücke nur so weit aus, wie nötig
  • Bei && wird die zweite Bedingung nicht mehr geprüft, wenn die erste bereits false ist
  • Bei || wird die zweite Bedingung nicht mehr geprüft, wenn die erste bereits true ist
                    
                        <?php
                        $user = null;

                        // Zweiter Teil wird nicht ausgeführt, da $user null ist
                        if ($user !== null && $user->isAdmin()) {
                            // ...
                        }
                    
                

Operatorrangfolge

  • Operatoren werden nicht einfach von links nach rechts ausgewertet - es gilt "Punkt vor Strich" und weitere Regeln
  • Mit runden Klammern () lässt sich die Reihenfolge gezielt steuern und der Code lesbarer machen
                    
                        <?php
                        echo 2 + 3 * 4;   // 14 - Multiplikation zuerst
                        echo (2 + 3) * 4; // 20 - Klammer zuerst

                        $result = 5 > 3 && 2 > 1; // Vergleiche vor &&
                    
                

Bedingungen: if / else

Mit if wird ein Codeblock nur ausgeführt, wenn die Bedingung true ergibt.

                    
                        <?php
                        $age = 16;

                        if ($age >= 18) {
                            echo "Volljährig";
                        } else {
                            echo "Minderjährig";
                        }
                    
                

elseif - mehrere Fälle

Mit elseif lassen sich beliebig viele weitere Bedingungen prüfen, bevor als letzte Option else greift.

                    
                        <?php
                        $points = 72;

                        if ($points >= 90) {
                            echo "Note 6";
                        } elseif ($points >= 75) {
                            echo "Note 5";
                        } elseif ($points >= 60) {
                            echo "Note 4";
                        } else {
                            echo "Note ungenügend";
                        }
                    
                

switch

switch vergleicht einen Wert mit mehreren möglichen Fällen - übersichtlicher als viele elseif bei einem einzelnen Vergleichswert.

                    
                        <?php
                        $day = 3;

                        switch ($day) {
                            case 1:
                                echo "Montag";
                                break;
                            case 2:
                                echo "Dienstag";
                                break;
                            case 3:
                                echo "Mittwoch";
                                break;
                            default:
                                echo "Unbekannter Tag";
                        }
                    
                

Ohne break "fällt" die Ausführung in den nächsten Fall (Fallthrough)!

Ternärer Operator

Der ternäre Operator ?: ist eine Kurzform für ein einfaches if/else, das einen Wert zurückgibt.

                    
                        <?php
                        $age = 20;

                        // Bedingung ? Wert wenn true : Wert wenn false
                        $status = $age >= 18 ? "Volljährig" : "Minderjährig";
                        echo $status;
                    
                

Null-Coalescing-Operator

?? gibt den linken Wert zurück, falls dieser existiert und nicht null ist - sonst den rechten Wert.

                    
                        <?php
                        $username = $_GET["user"] ?? "Gast";
                        echo $username;

                        // Entspricht in etwa:
                        $username = isset($_GET["user"]) ? $_GET["user"] : "Gast";
                    
                

Praktisch für Standardwerte, z.B. bei fehlenden Formular- oder URL-Parametern.

TL;DR

  • Arithmetische (+ - * / % **), Zuweisungs- (+= -= .= ...) und Inkrement-/Dekrement-Operatoren (++ --) rechnen und verändern Werte
  • Logische Operatoren (&& || !) kombinieren Bedingungen und werden per Short-Circuit ausgewertet
  • Klammern () steuern die Operatorrangfolge und verbessern die Lesbarkeit
  • if/elseif/else und switch steuern den Programmablauf
  • ?: und ?? sind kompakte Kurzformen für einfache Fallunterscheidungen bzw. Standardwerte