empty($string) oder !$string
empty($string) oder !$string
am 30.09.2006 16:00:48 von Tobias Wendorff
Hi,
welches ist die professionelle Art zu überprüfen, ob ein String
leer ist (die NULL ausgenommen):
1. if(empty($string))
2. if(empty($string) == TRUE)
3. if(!$string)
!$string ist in meinen Augen identisch mit empty($string).
Grüße
Tobias
Re: empty($string) oder !$string
am 30.09.2006 16:15:40 von Ulf Kadner
Tobias Wendorff wrote:
> welches ist die professionelle Art zu überprüfen, ob ein String
> leer ist (die NULL ausgenommen):
>
> 1. if(empty($string))
Geht dazu nicht NULL ist hier genau wie '' immer TRUE
Das laest sich aber einfach umsetzten, wenn man genau auf string
als Type prüfen will indem man folgendes nimmt:
define ('EMPTY_STR', '');
if($string === EMPTY_STR)
MfG, Ulf
Re: empty($string) oder !$string
am 30.09.2006 16:23:55 von Carsten Wiedmann
Tobias Wendorff schrieb:
> welches ist die professionelle Art zu überprüfen, ob ein String
> leer ist (die NULL ausgenommen):
Ich würde sagen, dass kommt immer auch den Fall drauf an. Ich würde sagen
so:
| if ('' == $string) {}
Ist halt auch eine Frage, wie wichtig es dir ist, ob in $string wirklich ein
Typ String drin ist. Und was bei true/false, 0/1 passieren soll.
> 1. if(empty($string))
> 2. if(empty($string) == TRUE)
> 3. if(!$string)
2. ist IMHO unnötig
1. und 3. erkennt auch einen String mit dem Inhalt "0" als leer.
> !$string ist in meinen Augen identisch mit empty($string).
Der Unterschied ist, dass empty() auch korrekt ist, wenn $string noch nicht
initialisiert wurde.
Gruß
Carsten
Re: empty($string) oder !$string
am 30.09.2006 16:28:56 von Niels Braczek
Tobias Wendorff schrieb:
> welches ist die professionelle Art zu überprüfen, ob ein String
> leer ist (die NULL ausgenommen):
>=20
> 1. if(empty($string))
> 2. if(empty($string) == TRUE)
> 3. if(!$string)
>=20
> !$string ist in meinen Augen identisch mit empty($string).
Grundsatz: Prüfe das, was du prüfen willst und nicht irgendetwas, das=
so
ähnlich evaluiert.
Alle drei Varianten liefern auch TRUE, wenn $string NULL ist.
Die Prüfung auf TRUE in Variante 2 ist überflüssig, if() prüft be=
reits
auf TRUE.
Variante 3 konvertiert den String in einen Booleschen Wert und negiert ih=
n.
Du suchst
if ( $string !== '' ) oder
if ( empty( $string ) && !is_null( $string ) )
Wähle die Variante, die klarer ausdrückt, was passieren soll.
MfG
Niels
--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: empty($string) oder !$string
am 30.09.2006 16:29:19 von Tobias Wendorff
Carsten Wiedmann wrote:
> Tobias Wendorff schrieb:
>
>> 1. if(empty($string))
>> 2. if(empty($string) == TRUE)
>> 3. if(!$string)
>
> 2. ist IMHO unnötig
Und wie siehst Du das Gegenstück an?
a. if(!$empty($string))
b. if($emptry($string) == FALSE)
Das andere scheint wirklich eine Fallentscheidung zu sein.
Re: empty($string) oder !$string
am 30.09.2006 16:38:48 von Carsten Wiedmann
Tobias Wendorff schrieb:
> Carsten Wiedmann wrote:
> > > 2. if(empty($string) == TRUE)
> >
> > 2. ist IMHO unnötig
>
> Und wie siehst Du das Gegenstück an?
Nils hat es ja grad schon erklärt. Da if() sowieso auf true prüft, und
empty() true oder false zurückliefert ist
| if(empty($string) == TRUE)
und
| if(empty($string))
identisch.
Das Gegenstück wäre dann die Negierung vom empty():
| if(!empty($string))
Gruß
Carsten
Re: empty($string) oder !$string
am 30.09.2006 17:54:44 von Sven Drieling
Niels Braczek wrote:
Hallo,
> Tobias Wendorff schrieb:
>=20
>> welches ist die professionelle Art zu überprüfen, ob ein String
>> leer ist (die NULL ausgenommen):
>>=20
>> 1. if(empty($string))
>> 2. if(empty($string) == TRUE)
>> 3. if(!$string)
>>=20
>> !$string ist in meinen Augen identisch mit empty($string).
>=20
> Grundsatz: Prüfe das, was du prüfen willst und nicht irgendetwas,=
das so
> ähnlich evaluiert.
Speziell empty() liefert für eine ganze Reihe von Fällen true.
Aus dem Handbuch
--- schnipp -----
The following things are considered to be empty:=20
"" (an empty string)
0 (0 as an integer)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
var $var; (a variable declared, but without a value in a class)
ChangeLog
Version Description
PHP 5 As of PHP 5, objects with no properties are no longer considere=
d
empty.=20
PHP 4 As of PHP 4, The string value "0" is considered empty.
---- schnapp -----
> Du suchst
>=20
> if ( $string !== '' ) oder
Jenes würde ich nehmen. Überprüft ja zugleich auf Typ ist
String und auf String ist leer.
=20
> if ( empty( $string ) && !is_null( $string ) )
Würde auch "0" als Leerstring anerkennen.
tschuess
[|8:)
Re: empty($string) oder !$string
am 30.09.2006 19:15:46 von Claus Reibenstein
Tobias Wendorff schrieb:
> 2. if(empty($string) == TRUE)
Vergleiche mit TRUE oder FALSE entlarven den dilettantischen
Programmierer. Sie zeugen von fehlendem Verständnis für Aussagenlogik.
Gruß. Claus
Re: empty($string) oder !$string
am 30.09.2006 21:08:13 von Carsten Wiedmann
Claus Reibenstein schrieb:
> Tobias Wendorff schrieb:
>
> > 2. if(empty($string) == TRUE)
>
> Vergleiche mit TRUE oder FALSE entlarven den dilettantischen
> Programmierer. Sie zeugen von fehlendem Verständnis für Aussagenlogik.
Mal abgesehen von dem Fall hier, hast du dann noch nie strpos() benutzt?
Gruß
Carsten
Re: empty($string) oder !$string
am 30.09.2006 21:16:57 von Udo Neist
Ulf Kadner wrote:
> Tobias Wendorff wrote:
>
>> welches ist die professionelle Art zu überprüfen, ob ein String
>> leer ist (die NULL ausgenommen):
>>
>> 1. if(empty($string))
>
> Geht dazu nicht NULL ist hier genau wie '' immer TRUE
>
> Das laest sich aber einfach umsetzten, wenn man genau auf string
> als Type prüfen will indem man folgendes nimmt:
>
> define ('EMPTY_STR', '');
>
> if($string === EMPTY_STR)
>
> MfG, Ulf
Man könnte auch auf die Stringlänge prüfen:
if (strlen($string)>0) # falls $string auf Inhalt geprüft werden
soll
if (!strlen($string)) # falls auf eine leere Zeichenkette geprüft
werden soll
Ob eine Variable vom Typ String ist, kann man mit is_string()
prüfen.
Gruß
Udo
Re: empty($string) oder !$string
am 30.09.2006 21:56:25 von Niels Braczek
Udo Neist schrieb:
> Man könnte auch auf die Stringlänge prüfen:
>=20
> if (strlen($string)>0) # falls $string auf Inhalt geprüft werden
> soll
Korrekt.
> if (!strlen($string)) # falls auf eine leere Zeichenkette geprüft
> werden soll
Nicht korrekt. strlen() liefert keinen Booleschen Wert.
if ( strlen( $string ) == 0 )
trifft's.
MfG
Niels
--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: empty($string) oder !$string
am 30.09.2006 21:58:38 von Niels Braczek
Carsten Wiedmann schrieb:
> Claus Reibenstein schrieb:
>=20
>> Tobias Wendorff schrieb:
>>
>> > 2. if(empty($string) == TRUE)
>>
>> Vergleiche mit TRUE oder FALSE entlarven den dilettantischen
>> Programmierer. Sie zeugen von fehlendem Verständnis für Aussagenlo=
gik.
>=20
> Mal abgesehen von dem Fall hier, hast du dann noch nie strpos() benutzt=
?
Das ist etwas anderes, da strpos() je nach Parameter einen Booleschen
Wert oder eine Ganzzahl liefert. Dem muss natürlich Rechnung getragen
werden. Allerdings hast Du Recht, dass Claus' Aussage zu relativieren ist=
MfG
Niels
--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: empty($string) oder !$string
am 30.09.2006 22:54:47 von Andre Meiske
Niels Braczek wrote:
> Carsten Wiedmann schrieb:
>> Claus Reibenstein schrieb:
>>
>>> Tobias Wendorff schrieb:
>>>
>>> > 2. if(empty($string) == TRUE)
>>>
>>> Vergleiche mit TRUE oder FALSE entlarven den dilettantischen
>>> Programmierer. Sie zeugen von fehlendem Verständnis für Aussagenlogik.
>>
>> Mal abgesehen von dem Fall hier, hast du dann noch nie strpos() benutzt?
>
> Das ist etwas anderes, da strpos() je nach Parameter einen Booleschen
> Wert oder eine Ganzzahl liefert. Dem muss natürlich Rechnung getragen
> werden. Allerdings hast Du Recht, dass Claus' Aussage zu relativieren ist.
Claus' Aussage kann meiner Meinung nach so stehen bleiben. Wer bei strpos
mit '== false' testet, fällt auf die Nase. Bedingungen mit '== true'
oder '== false' sind mir auch ein Dorn im Auge... '=== false' und Konsorten
hingegen können bei den manchmal etwas seltsamen Rückgabewert-Konventionen
notwendig (und dann auch sinnvoll) sein.
Ad Astra
Andre
Re: empty($string) oder !$string
am 30.09.2006 23:19:37 von Udo Neist
Niels Braczek wrote:
> Udo Neist schrieb:
>
>> Man könnte auch auf die Stringlänge prüfen:
>>
>> if (strlen($string)>0) # falls $string auf Inhalt geprüft werden
>> soll
>
> Korrekt.
>
>> if (!strlen($string)) # falls auf eine leere Zeichenkette geprüft
>> werden soll
>
> Nicht korrekt. strlen() liefert keinen Booleschen Wert.
> if ( strlen( $string ) == 0 )
> trifft's.
Ich war mir da nicht so sicher, weil ich mal in einer Doku was
gelesen habe, das strlen() false oder 0 zurückliefert. Vielleicht
war es auch eher das, was du richtigerweise geschrieben hast. Ich
brauch eher die Prüfung auf Inhalt und nicht auf ein leeren String.
Gruß
Udo
Re: empty($string) oder !$string
am 01.10.2006 02:08:22 von Hadanite Marasek
> 1. if(empty($string))
> 2. if(empty($string) == TRUE)
> 3. if(!$string)
>
> !$string ist in meinen Augen identisch mit empty($string).
>
> Grüße
> Tobias
!$string ergibt ein E_NOTICE, wenn $string uninitialisiert ist.
Dazu ist noch anzumerken, dass PHP "0" und 0 ebenfalls als empty ansieht
- darüber bin ich schon bei Formularen gestolpert, wenn man da z. b.
irgendwo 0 eingeben kann.
Re: empty($string) oder !$string
am 01.10.2006 14:00:36 von Claus Reibenstein
Hadanite Marasek schrieb:
> !$string ergibt ein E_NOTICE, wenn $string uninitialisiert ist.
>
> Dazu ist noch anzumerken, dass PHP "0" und 0 ebenfalls als empty ansieht
> - darüber bin ich schon bei Formularen gestolpert, wenn man da z. b.
> irgendwo 0 eingeben kann.
Wobei "0" und 0 schon vom PHP-Typenkonzept her identisch sind. Das ist
eine der üblen Fallen von PHP. Das sind Fehler, nach denen man u.U. ewig
sucht.
Gruß. Claus