xHBBo: NULL = 0?

In einem Handbuch sehe ich diese Schreibweise

  
if ($wetter[5] === NULL) {  
......  
}  

ist das gleiche wie

  
if ($wetter[5] === 0) {  
......  
}  

bzw.

  
if ($wetter[5] == 0) {  
......  
}  

oder auch

  
if ($wetter[1] == NULL) {  
......  
}  

und zu guter letzt auch das gleiche wie

  
if ($wetter[5] = 0) {  
......  
}  

sehe ich das richtig?

  1. Meine Herren!

    Das einfache Gleichheitszeichen steht für eine Zuweisung:

    $foo = 'bar';

    Die Zuweisung hat selbst auch einen Rückgabewert, und zwar der zugewiesen Wert, folgendes Beispiel kann das verdeutlichen:

    $foo = ( $bar = 'baz' ) + 'boom';  
    $bar; // 'baz';  
    $foo; // 'bazboom';
    

    Man kann eine Zuweisung deshalb auch da einsetzen, wo Bedingungen erwartet werden, sehr häufig sieht man zum Beispiel folgendes:

    while( $row = mysql_fectch_assoc( $res )

    Die Schleife bricht dann ab, wenn $row ein falsy Wert zugewisen wird.

    Die doppelten Gleichheitszeichen stehen für einen Vergleich mit implizierter Typumwandlung, so ist zum Beispiel:

    5 == '5'; // true

    Bei dreifachen Gleichheitzeichen wird keine automatische Typumwandlung vorgenommen und auf das obige Beispiel übertragen, gibt uns:

    5 === '5' // false

    Nur bei gleichem Wert und gleichem Typen wird === uns true geben:

    5 === 5 // true  
    '5' === '5' // true
    

    Bei Objekten geben sowohl das doppelte Gleich als auch das dreifache Gleich nur dann true zurück, wenn auf beiden Seiten das SELBE Objekt steht, man spricht dann von der Identität eines Objekts.

    --
    “All right, then, I'll go to hell.” – Huck Finn
    1. Meine Herren!

      $foo = ( $bar = 'baz' ) + 'boom';

      $bar; // 'baz';
      $foo; // 'bazboom';

        
      In PHP werden Zeichenketten natürlich mit einem Punkt verknüpft, die erste Zeile muss deshalb wie folgt aussehen:  
        
      ~~~php
      $foo = ( $bar = 'baz' ) . 'boom';  
      
      
      --
      “All right, then, I'll go to hell.” – Huck Finn
    2. Vielen Dank für deine sehr ausführliche Erklärung. So ganz dahinter gekommen bin ich leider noch nicht. Ein Beispiel

        
      $Eingabefeld = $_POST['ort'];  
      $wetter = explode('-',$Eingabefeld);  
      
      

      Hier kann der User zwei Daten eingeben die durch ein "-" getrennt sind. Nun möchte ich diese Ausgaben lassen.

        
      echo $wetter[1] // City 1  
      
      
        
      echo $wetter[2] // City 2  
      
      

      Beides funktioniert. Nun möchte ich erreichen wenn in $Eingabefeld[1] kein Wert vorhanden ist dann soll etwas gemacht werden. Hier dachte ich an folgendes:

        
      if ($wetter[1] == 0) {  
      ......  
      }  
      
      

      Wenn ich es richtig verstanden habe heißt es nun "wenn in $wetter[2] NICHTS vorhanden ist dann mach mach etwas, sonst eben weiter im Text. Aber scheinbar habe ich hier ein Denkfehler?

      1. Meine Herren!

        $Eingabefeld = $_POST['ort'];
        $wetter = explode('-',$Eingabefeld);

          
        Ich breche das mal weiter runter.  
        In $\_POST['ort'] steht (falls vorhanden) eine Wert mit dem Typ String.  
          
        Mit explode() kannst du den String in ein Array von Strings aufteilen.  
          
        Ob einer der beiden Strings leer ist, kannst du herausfinden, indem du sie mit dem leeren String vergleichst, also ganz strikt, wie folgt:  
          
        ~~~php
        $wetter[0] === ''  
        $wetter[1] === ''
        

        In einem anderen Fall ist die die Post-Variable 'ort' gar nicht gesetzt, dann macht es natürlich auch keinen Sinn explode() anzuwenden. Ob die Variable überhaupt gesetzt ist, kannst du mit isset() ausmachen.

        Außerdem gibt es noch den Fall, dass $_POST['ort'] zwar gesetzt ist, aber dass kein Bindestrich darin vorkommt. Dann explode() uns Array mit nur EINEM String zurück. $wetter[1] ist dann also nicht gesetzt. Das können wir wieder mit isset() überprüfen.

        Du kannst den Typen von Variablen auch ganz konkret ermitteln. Ich empfehle dir mal etwas mit gettype() herum zu spielen.

        Die Regeln für die automatische Typkovertierung (mit ==) sind nicht unbedingt offensichtlich, in dieser Tabelle sind einige häufige Fälle aufgelistet. Etwas mehr Theorie findest du im Abschnitt Type Juggling.

        --
        “All right, then, I'll go to hell.” – Huck Finn
        1. Hello,

          Du kannst den Typen von Variablen auch ganz konkret ermitteln. Ich empfehle dir mal etwas mit gettype() herum zu spielen.

          Aus der HTTP-Schnittstelle liefert uns PHP aber immer nur den Typ String oder den Typ Array of Strings. Ob ein String auch eine Zahl repräsentieren kann, muss man erst noch ermitteln (filtern).

          Objekte habe ich übrigens noch nicht geschafft, per POST oder GET herzustellen.

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          Die ultimative Seite für Selbermacher
      2. Wenn ich es richtig verstanden habe heißt es nun "wenn in $wetter[2] NICHTS vorhanden ist dann mach mach etwas, sonst eben weiter im Text. Aber scheinbar habe ich hier ein Denkfehler?

        Ja. Er besteht in der Annahme dass "die Zahl null" und "nichts" das selbe ist.
        Dein "nichts" besteht aber wie ich das herauslese aus leerem Text. Wenn du auf ein Blatt Papier eine Null malst und ein anderes leer lässt, siehst du dass das verschieden aussieht :-)

        Dass PHP "nichts" in null umwandelt könnte sein, weiß ich nicht. Ich find sowas aber persönlich ziemlich zum k.... äh also unsauber und würde deswegen den Vergleich nicht so stehen lassen, selbst wenn er funktioniert. Übersichtlich und erklärend ist es kein bisschen.