Olaf Schneider: Syntax von "or die"

Hallo,

ich weiss zwar, wie der folgende Beispielscode

mysql_select_db(blabla...) or die("ERROR");

abgehandelt wird. Ich moechte aber gerne wissen, ob
diese spezielle Syntax von "or"  irgendwo dokumentiert
ist. Or ist hier ja kein Operator, sondern eine Kon-
trollstruktur. Ich kann aber nirgendwo Infos zu dieser
Syntax finden. Weiss jemand, was genau ein or an die-
ser Stelle macht?

Gruss Olaf Schneider, Essen

  1. Hallo,

    ich weiss zwar, wie der folgende Beispielscode

    mysql_select_db(blabla...) or die("ERROR");

    abgehandelt wird. Ich moechte aber gerne wissen, ob
    diese spezielle Syntax von "or"  irgendwo dokumentiert
    ist. Or ist hier ja kein Operator, sondern eine Kon-
    trollstruktur. Ich kann aber nirgendwo Infos zu dieser
    Syntax finden. Weiss jemand, was genau ein or an die-
    ser Stelle macht?

    Grundsätzlich handelt es sich bei diesem OR-Konstrukt immer noch um einen Ausdruck:

    (variable = ) funktion1() OR funktion2();

    Dass das Resultat der OR-Verknüpfung nirgendwo gespeichert ist, mag befremdlich erscheinen, ist aber wohl ganz normal.

    Nun kommt noch ein Mechanismus zum Tragen, der die Ausführung von funktion2() verhindert: Short-Circuit-Evaluation. OR gibt dann "wahr" zurück, wenn einer der beiden Operanden wahr ist. Wenn funktion1() schon wahr ist, dann wird funktion2() garnicht mehr geprüft, weil das Resultat von OR schon feststeht. Bei AND ist es genauso, nur wird abgebrochen, wenn der erste Operand false ergibt.

    Auf diese Weise wird das die() nur dann ausgeführt, wenn die erste Funktion false ergibt - meist, weil irgendwas fehlschlägt.

    Das Prinzip ist mir übrigens zuerst bei Perl begegnet - mag sein, dass PHP sich das abgeguckt hat. Nicht alle Sprachen bieten diese relativ simple Methode zum Abbruch bei Fehlern an.

    - Sven Rautenberg

    1. (An Sven Rautenberg)

      Vielen Dank fuer die prompte und vor allem fundierte Antwort.

      Olaf Schneider

      P.S.: Da kann ich doch gleich noch eine Frage loswerden, kannst Du / koennen Sie mir ein [PHP-]Buch empfehlen, in dem u.a. solche Themen behandelt werden und die nicht nur Einfuerung oder Funktionsmanual sind?

      1. Moin!

        P.S.: Da kann ich doch gleich noch eine Frage loswerden, kannst Du / koennen Sie mir ein [PHP-]Buch empfehlen, in dem u.a. solche Themen behandelt werden und die nicht nur Einfuerung oder Funktionsmanual sind?

        Kann ich nicht - ich kenne keins. Ich empfehle http://www.php.net und http://www.selfphp.info als Referenzen und Anschauungsmaterial. Insbesondere die Benutzeranmerkungen auf php.net sind sehr informativ und hilfreich.

        - Sven Rautenberg

        1. Vielen Dank

          1. Hi!

            Wobei ich immer öfter Dinge in Beispielcode finde, die nirgends im Manual dokumentiert sind, zumindest finde ich nicht wo.
            Ist mir z.B. bei curl aufgefallen, da muß man ne Menge probieren oder die Kommetare lesen, aber woher wissen _die_ das?

            Grüße
            Andreas

            1. Hallo,

              Ist mir z.B. bei curl aufgefallen, da muß man ne Menge probieren oder die Kommetare lesen, aber woher wissen _die_ das?

              Gegenfrage: Wie bekommen Sicherheitsexperten Sicherheitslöcher in *proprietärer* Software zum Vorschein? Ganz einfach: Überlegen, was klappen könnte und dann Trial & Error. Ich habe bisher ein einziges Kommentar bei php.net geschrieben, da gings um die Funktion OCIBindByName (Kommentar vom 27. August) - das hat mich wirklich in den Wahnsinn getrieben, bis ich das herausbekommen habe - vor allem, weil ich da keine Fehlermeldung bekommen habe.

              Grüße,

              Christian