Null

Wolfsbein

Erfahrenes Mitglied
Hallo
folgender Code:
PHP:
for($i=0;$i<2;$i++)
{
    echo '$i in Schleife Wert:'.$i.'<br />';
    if($i == NULL);
    {
        echo '$i in if Wert:'.$i.'<br />';
    }
}
gibt bei mir unter PHP 4.1.2 das aus:
Code:
$i in Schleife Wert:0
$i in if Wert:0
$i in Schleife Wert:1
$i in if Wert:1
Aber den Wert NULL gibt es doch auch in PHP, oder? Daher dürfte der Text in der if-Klausel doch nie ausgegeben werden, oder? Danke.
 
Sorry das war ein Tippfehler. Ich habe ja nur schnell eine kleine Demo geschrieben. Das entscheidende ist, dass in der Version ohne ";" trotzdem das ausgegeben wird:
Code:
$i in Schleife Wert:0
$i in if Wert:0
$i in Schleife Wert:1
Und NULL ist ja imho nicht 0.
 
Wolfsbein hat gesagt.:
Und NULL ist ja imho nicht 0.

genau das ist der Fall, also ist die Ausgabe des Scripts auch logisch!!!

$i ist nur dann NULL wenn es überhaupt nicht gesetzt ist, aber die Zahl 0 ist ja ein Wert, sprich, die Variable ist dann gesetzt. ;-)


Dunsti
 
Auch auf die Gefahr das ich jetzt was falsches sage, in C oder in JAVA ist das aber nicht so. Und wenn $i bei mir gesetzt ist, also im ersten Durchlauf 0 dann müsste ja
if($i == NULL) false sein. Weil 0 ja bedeutet die Variable hat eine Wert :confused:.
 
NULL wird hier automatisch in den benötigten Typ gecastet, hier also wohl in einen Ganzzahltyp. Und als Ganzzahl ist NULL nunmal 0. Willst du eine typsichere Überprüfung, musst du als Vergleichsoperator === verwenden.
 
stimmt, sorry ... war Denkfehler von mir :rolleyes:

Du hast Recht, eigentlich dürfte das in dem IF nie ausgegeben werden!!!

Ich hab das bei mir nochmal getestet und komme zur selben Ausgabe:

Code:
$i in Schleife Wert:0
$i in if Wert:0
$i in Schleife Wert:1

Schlussfolgerung: 0 ist doch kein gültiger Wert (obwohl er es eigentlich sein sollte)
oder anders: 0 = NULL !!!

ich geb zu, dass es unlogisch ist.
[edit] bzw. nach der Erklärung von Reima wieder logisch :-) [/edit]

Dunsti
 
Und hier was von php.net:
Don't try to test
if ($intSomething==NULL) {
...
}
use is_null() instead.
The first statement misses 0 values.

Regards,
Calin

[Ed. note: this is because == tests for equivalence of value, but not type. NULL evaluates to
false, as does 0, so NULL == 0 is true--even though 0 is type int and NULL is type null.
You should use either is_null() as noted or ===, which returns true only if its operands are
equal and of the same type.]
 
Zurück