phpbar.de logo

Mailinglisten-Archive

[php] mal wieder 0 und isset

[php] mal wieder 0 und isset

Ulf Wendel UW_(at)_netuse.de
Tue, 14 Dec 1999 13:06:18 +0100


Marc Logemann wrote:
> 
> >>wenn ich sage: if($test==0)
> >>und vorher test nicht definiert habe, warum ist die Bedingung wahr?
> 
> > durch die Bedinung "==0" wird $test als Integer deklariert. Da ihr
> > noch kein Wert zugewiesen wurde, ist sie eben =0
> 
> kann das jemand bestaetigen? Ich mein, warum wird durch eine Vergleichsoperation eine Variablenzuweisung gemacht? Klingt fuer mich ersma komisch.

Wie gesagt PHP kennt zwar Typen, ist aber nicht sehr streng bei
der Behandlung. Altes BASIC (Beginners all supposed instruction
code) Prinzip.

Du darfst $test einen Wert zuweisen über '$test = "1"' ($test
wird ein String) und '$test = 1' ($test wird ein Integer) und bei
beiden Schreibweisen darfst Du hinterher mit $test numerische
Operationen durchführen, z.B. '$a = 2*$test'. Warum? Weil PHP
$test intern in diversen  Repräsentationen speichert u.a. als
float, int und char (korrigiert mich hier!). 

Wenn der Interpreter auf einen Ausdruck trifft wie '$a =
2*$test', wird der Ausdruck in '$a = 2*(int)$test' übersetzt und
der gespeicherte Integer Wert von $test verwendet. Trifft der
Interpreter auf '$a = "2".$test' wird dies interpretiert wie '$a
= "2".(string)$test'. Gleiches geschieht bei einer Bedingung. PHP
kümmert sich für Dich um die Typwandlung. Dies nimmt Dir viel
Arbeit ab und beseitigt Fehlerquellen.

Warum hat (int)$test den Wert 0, obwohl Du $test noch nie vorher
benutzt hast? Weil, dies der Wert ist den die meisten Anfänger
erwarten würden, wenn sie ohne Vorankündigung eine neue Variable
benutzen und als Integer interpretieren.

Ulf

-- 
Ulf Wendel
NetUSE Kommunikationstechnologie GmbH
Siemenswall, D-24107 Kiel, Germany
Fon: +49 431 386435 00  --  Fax: +49 431 386435 99


php::bar PHP Wiki   -   Listenarchive