Mailinglisten-Archive |
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