If not ...

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • If not ...

    Hallo zusammen

    Gibt es in PHP die Möglichkeit eine if Abfrage zu negieren? Also wie in ASP z.B.
    Code:
    if not ... then
    PHP-Code:
    if (empty($adr_row[firstname]))
          print 
    "{$adr_row[firstname]}<br />\n"
    Ich habe != ungleich gefunden. Das geht aber mit empty() nicht, oder?
    Isset() ist auch nicht richtig, da der Wert 0, "0" oder "" sein könnte.

    Gruss Andreas

  • #2
    if(!<ausdruck>)

    PHP-Code:
    if (!isset($foo)) {}
    if (!empty(
    $bar)) {} 
    Strings gehören außerdem in Hochkomma oder Anführungszeichen, ansonsten denkt PHP, dass es sich um Konstanten handelt.

    falsch:
    PHP-Code:
    $array[schluessel] = wert
    richtig:
    PHP-Code:
    $array["schluessel"] = "wert"

    Kommentar


    • #3
      PHP-Code:
      if (!empty($adr_row[firstname])) blabla(); 
      Wir werden alle sterben

      Kommentar


      • #4
        if not

        So einfach !!!!!

        "!" scheint immer zu negieren, toll!

        Kommentar


        • #5
          Tut es aber nicht ... das macht es nur an geraden Tagen ... und an Wochentagen die mit "S" beginnen ...
          carpe noctem

          [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
          [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

          Kommentar


          • #6
            So einfach !!!!!

            "!" scheint immer zu negieren, toll!
            Darauf würde ich mich nicht verlassen. Aus gut informierten Kreisen verlautet, dass in PHP 6 Operatoren überladen werden können. ;-)

            Nein, im Ernst:

            Zitat von Buender Beitrag anzeigen
            Hallo zusammen

            Gibt es in PHP die Möglichkeit eine if Abfrage zu negieren? Also wie in ASP z.B.
            Code:
            if not ... then
            PHP-Code:
            if (empty($adr_row[firstname]))
                  print 
            "{$adr_row[firstname]}<br />\n"
            Ich habe != ungleich gefunden. Das geht aber mit empty() nicht, oder?
            Isset() ist auch nicht richtig, da der Wert 0, "0" oder "" sein könnte.
            Andersherum wird ein Schuh daraus: Empty() ist für die Abfrage, ob eine Zeichenkette leer ist untauglich, weil '0' als "empty" gesehen wird. Beim Aufruf von

            PHP-Code:
            empty($var
            wird intern in etwa folgendes Programm abgespult (IIRC):

            PHP-Code:
            @(bool)(integer)$var 
            Das ist PHP-typischer Schwachsinn, den man zumindest bei Zeichenketten mit

            PHP-Code:
            !isset($var[0]) 
            besser lösen kann, weil damit explizit auf einen Leer-String geprüft wird, und nicht ein Wert zu BOOLEAN zwangsgecastet wird.

            Empty() hat noch einen weiteren Haken: Es handelt sich dabei um ein so genanntes Sprachkonstrukt und KEINE Funktion. Das kann dazu führen, dass empty() nicht in jedem Fall genutzt werden kann. So liefert bspw.

            PHP-Code:
            empty(irgendeine_funktion()) 
            eine lustige Fehlermeldung in der Art:

            Fatal error: Can't use function return value in write context in schwurbel/meinscript.php on line 23
            Die sauberere Lösung wäre, die Länge der Zeichenkette mit strlen() zu holen und dann mit 0 zu vergleichen.

            PHP-Code:
            if (strlen($var) === 0) {
                
            // string ist leer
            }

            if (
            strlen($var) !== 0) {
                
            // string ist nicht leer

            Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

            Kommentar


            • #7
              Mir ist in letzter Zeit zur Gewohnheit geworden, dass ich Arrays damit überprüfe, ob sie ein Element besitzen oder nicht.
              Ich könnte das auch über count($array) == 0 prüfen, jedoch finde ich die Leseart schöner. ^^
              Was meinst du zu dieser Benutzungsart?

              Warum benutzt du bei der Längenprüfung drei Gleichheitszeichen?
              Ich kenne das nur daher, dass man prüfen will, ob auch der Typ genau gleich ist. Ist das hier nicht unnötig?

              gruß
              Piremilok

              Kommentar


              • #8
                Zitat von Piremilok Beitrag anzeigen
                Mir ist in letzter Zeit zur Gewohnheit geworden, dass ich Arrays damit überprüfe, ob sie ein Element besitzen oder nicht.
                Ich könnte das auch über count($array) == 0 prüfen, jedoch finde ich die Leseart schöner. ^^
                Was meinst du zu dieser Benutzungsart?
                Finde ich unnötig.

                PHP-Code:
                function foo(array $array) {
                    if (
                $array) {
                        return 
                'Arrays ist nicht leer<br />';
                    } else {
                        return 
                'Array ist leer<br />';
                    }
                }

                echo 
                foo(array());
                // Array ist leer

                echo foo(array(123));
                // Array ist nicht leer

                echo foo(array(0));
                // Array ist nicht leer 
                Außerdem:
                PHP-Code:
                $array = array(
                    
                => 'foo',
                    
                => 'bar'
                );

                var_dump((bool) isset($array[0]));
                // bool(false)

                var_dump((bool) $array);
                // bool(true)

                var_dump((bool) count($array));
                // bool(true) 
                Zuletzt geändert von h3ll; 29.05.2010, 08:58.

                Kommentar


                • #9
                  Zitat von Piremilok Beitrag anzeigen
                  Mir ist in letzter Zeit zur Gewohnheit geworden, dass ich Arrays damit überprüfe, ob sie ein Element besitzen oder nicht.
                  Ich könnte das auch über count($array) == 0 prüfen, jedoch finde ich die Leseart schöner. ^^
                  if (count($array)) { /* nicht leer */ }
                  tut es notfalls aber auch ...^^
                  Und das Gleiche geht auch mit strlen() bei Strings.

                  Was meinst du zu dieser Benutzungsart?
                  PHP-Arrays sind keine Strings. Da funktioniert der isset()-Trick nicht. Empty() geht da in Ordnung, auch wenn ich es sonst für ein eher dämliches Sprachkonstrukt halte. Wenn es seinen Namen nach dem hätte, was es tut, müsste es if_casted_to_int_and_casted_to_bool_and_false_plus_do_not_warn_if_unset() heißen ... ;-)

                  Warum benutzt du bei der Längenprüfung drei Gleichheitszeichen?
                  Ich kenne das nur daher, dass man prüfen will, ob auch der Typ genau gleich ist. Ist das hier nicht unnötig?
                  Das ist so eine Angewohnheit von mir, um das implizite Casten zu verhindern. Der Typ wird (intern) sowieso immer mitgeprüft. Aber bei den "gewöhnlichen" Vergleichsoperatoren findet, falls nötig, extra noch eine Typumwandlung statt. Die finde nun ich wiederum unnötig.
                  Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                  Kommentar

                  Lädt...
                  X