phpbar.de logo

Mailinglisten-Archive

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

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

Martin Ramsch m.ramsch_(at)_computer.org
Wed, 8 Sep 1999 12:27:08 +0200


Oliver Kummerow schrieb am Mittwoch, den  8. September 1999:
> Ich bin immer noch nicht 100% sicher, wie die Leerstrings völlig
> richtig abgefragt werden müssen. Ich versuche die verschiedenen
> Möglichkeiten aufzulisten. Bitte um Kritik, falls was nicht stimmt.

Alle Tests mit PHP 3.0.11:

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

               $str=true  $str=false
empty($str)        -          X     
!empty($str)       X          -     
                                    
isset($str)        X          X          Das ist klar, weil true==1
! isset($str)      -          -                        und  false==''
                                    
$str==''           -          X     
$str!=''           X          -     
                                    
$str               X          -     
! $str             -          X     

               $str=array()  $str=array('x')
empty($str)        X             -          
!empty($str)       -             X          
                                            
isset($str)        X             X          
! isset($str)      -             -          
                                            
$str==''           -             -          
$str!=''           -             -          
                                            
$str               -             X          
! $str             X             -          

               class foo { };   class foo { var $a };
               $str=new foo;    $trs = new foo;
empty($str)        X                 -
!empty($str)       -                 X

isset($str)        X                 X
! isset($str)      -                 -

$str==''           -                 -
$str!=''           -                 -

$str               -                 X
! $str             X                 -

> Es gibt anscheinend 3 Möglichkeiten:
> 
> 1. if ( empty ( $str ) ) 
> 
[...]
> Heisst, empty ( $str ) kann alternativ zu !isset ( $str ) eingesetzt
> werden.

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

> 3. if ( $str != "" )
> 
> Liefert in allen Fällen das gleiche Ergebnis wie unter 1.
> 
> 2. if ( ! str )
> 
> Ebenfalls das gleiche. Nur kürzer. 

(!$str) und ($str=='') unterscheiden sich von empty($str), wenn
$str='0'!

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 ...

Ciao,
  Martin
-- 
Martin Ramsch <m.ramsch_(at)_computer.org> <URL: http://ramsch.home.pages.de/ >
PGP: 0xE8EF4F75, 52 44 5E F3 B0 B1 38 26  E4 EC 80 58 7B 31 3A D7


php::bar PHP Wiki   -   Listenarchive