Maria: if Abfrage, vorher aber testen ob Var vorhanden

Wenn ich es so schreibe:

if ($i['text']<>'')

bekomme ich

Notice: Undefined variable:

Also mache ich es so:

if (isset($i['text'])&&($i['text']<>''))

ist das so OK, oder bekomme ich es noch eleganter hin?

Maria

  1. Wenn ich es so schreibe:

    if ($i['text']<>'')

    bekomme ich

    Notice: Undefined variable:

    Was eigentlich nicht weiter schlimm ist.

    Also mache ich es so:

    if (isset($i['text'])&&($i['text']<>''))

    ist das so OK, oder bekomme ich es noch eleganter hin?

    "in php prüfen ob eine variable vorhanden ist" in der Suchmaschine meiner Wahl führt mich direkt zur dieser PHP-Dokumentationsseite:

    http://php.net/manual/de/function.isset.php (die Funktion kennst du scheinbar bereits)

    Auf dieser Dokumentationsseite kommt man, nach aufmerksamem Lesen auf folgende Seite:
    http://www.php.net/manual/de/function.empty.php

    Diese lies bitte ebenfalls aufmerksam ;)

    1. Hello,

      Auf dieser Dokumentationsseite kommt man, nach aufmerksamem Lesen auf folgende Seite:
      http://www.php.net/manual/de/function.empty.php

      "empty()" liefert aber nicht dasselbe (oder das gleiche?) Ergebnis, wie "if $wert != ''".

      Wenn im Wert eine 0 drinsteht, ...

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Das war auch mein Gedanke, aber suit wird bestimmt antworten, daß man diese Seite selbstverständlich auch aufmerksamm lesen soll und daß man deshalb selbst drauf kommt.

        1. Das war auch mein Gedanke, aber suit wird bestimmt antworten, daß man diese Seite selbstverständlich auch aufmerksamm lesen soll und daß man deshalb selbst drauf kommt.

          Genau das wird er und tut er auch - denn aus den unvollständigen Problembeschreibungen die diverse Marias (Marienschwemme?) hier immer wieder abliefern lässt sich nicht riechen oder schmecken, was denn gemeint ist.

          Du selbst schreibst ja auch:

          Was elegant ist müßte erst mal definiert werden.

          Und ich schrieb, dass eine Notice grundsätzlich nicht weiter schlimm ist.

          1. Hello,

            Und ich schrieb, dass eine Notice grundsätzlich nicht weiter schlimm ist.

            Und genau das möchte ich anzweifeln.

            Eine Notice kann zwar "im Allgemeinen" nicht weiter schlimm sein.

            "Grundsätzlich" weist sie jedoch auf das mögliche Vorhandensein einer Sicherheitslücke hin. Die ist zwar mit dem Ende von "register Globals" erheblich kleiner geworden, aber immer noch nicht unmöglich.

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
             ☻_
            /▌
            / \ Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. Hier handelt es sich aber um den Zugriff auf ein array-Element, die Notice muß also kein Hinweis auf eine fehlende Initialisierung sein.

          2. dass eine Notice grundsätzlich nicht weiter schlimm ist.

            wie auch "ergänzende Hinweise"...

            Gruß
            Kalk

          3. Moin!

            Was elegant ist müßte erst mal definiert werden.

            Und ich schrieb, dass eine Notice grundsätzlich nicht weiter schlimm ist.

            Eine Notice ist schlimm.

            Wenngleich der Programmablauf dadurch im Ergebnis nicht weiter verändert wird, so hat man dennoch mit den Auswirkungen solcher Notices zu kämpfen:

            1. Notices müssen erkannt und irgendwo hin gemeldet werden. Das kostet durchaus Performance, vor allem dann, wenn diese Notices in ein Logfile auf Festplatte geschrieben werden.

            2. Notices helfen Fehler vermeiden, denn nicht existierende Variablen sind ein Programmfehler. Warum will man eine Variable verwenden, die nicht existiert? Das macht das Programm undurchsichtiger, denn anscheinend könnte es irgendwie wohl doch dazu kommen, dass diese Variable existiert, sonst wäre der Code so nicht geschrieben worden. Oder es ist tatsächlich ein Tippfehler, und eine ganz andere Variable war gemeint.

            3. Notices bei nicht existierenden Array-Keys sind ähnlich zu behandeln. Code, der stur davon ausgeht, dass alle Keys existieren, verschleiert die tatsächliche Datenstruktur des Arrays, denn in der Realität sind eben nicht alle Keys vorhanden, sondern manche optional. Dass Dinge optional sind, sollte im Code dokumentiert sein, indem genau diese isset()-Prüfung stattfindet. Umgekehrt bedeutet dann die Abwesenheit solch einer Prüfung, dass der Array-Key garantiert existiert - und wenn er das nicht tut, ist es tatsächlich ein Programmfehler.

            - Sven Rautenberg

  2. if (isset($i['text'])&&($i['text']<>''))

    ist das so OK, oder bekomme ich es noch eleganter hin?

    Isset ist OK und die Und-Verknüpfung auch. Was elegant ist müßte erst mal definiert werden. Der Variablenname könnte beispielsweise vermutlich aufschlußreicher sein, wenn es nicht nur ein Beispiel ist.