phpbar.de logo

Mailinglisten-Archive

[php] Re: Kein Unterschied zwischen: empty, =="", !, !isset ?

[php] Re: Kein Unterschied zwischen: empty, =="", !, !isset ?

Oliver Kummerow naklar_(at)_altavista.net
Wed, 08 Sep 1999 13:11:57 +0200


Hallo Martin,

Nochmal vielen Dank für die hochinteressante Antwort!
Die pefekte Matrix - die mußte ich mir erstmal ausdrucken.

Immerhin bin ich beruhigt, dass ich mich nicht getäuscht habe bei den
Fällen, die ich untersucht hatte. Allerdings hatte ich einiges
vergessen. In den Fällen, dass es nur um eine TRUE/FALSE-Auswertung bei
einfachen Variablen geht, funktionieren also empty($str), !$str,
$str=="", $str==FALSE und vice versa identisch.
(ich habe mir mal erlaubt, die Reihen etwas umzustellen, damit die
negative Evaluation immer oben ist).

               unset($str)  $str=''  $str=0  
empty($str)        X           X        X    
!empty($str)       -           -        -    
                                                                       
$str==''           X           X        X    
$str!=''           -           -        -    
                                                                       
! $str             X           X        X    
$str               -           -        -    

                                                                      

               $str=true  $str=false
empty($str)        -          X     
!empty($str)       X          -     
                                    
$str==''           -          X     
$str!=''           X          -     
                                    
! $str             -          X     
$str               X          -     


> Alle Tests mit PHP 3.0.11:

dito.

> Nur mit !isset($str) kann man sicher testen, ob eine Variable
> undefiniert ist (und nicht nur einen der false-Werte hat).

Yepp. Aber empty kassiert den Fall mit ein = Obermenge.



> Das Beispiel mit dem leeren Array und den Objekten zeigt zudem, daß
> dann weder =='' noch !='' gilt.
> 
> Im Detail hingeschaut ist es ziemlich verwirrend.  Man muß ganz genau
> überlegen, ob der Test als String oder als Zahl stattfindet und wie
> impliziete Konvertierungen aussehen ...

Ich würde (ganz milde & vorsichtig) sagen, das ist alles nicht gerade
sehr konventionell. PHP macht da sein ureigenes Regelwerk auf. 

Btw.: Sowas gehört doch eigentlich ins Handbuch, oder? Da stolpert man
dauernd drüber...


Mit freundlichen Grüßen,
Oliver Kummerow
email: naklar_(at)_altavista.net



php::bar PHP Wiki   -   Listenarchive