Einzelnen Beitrag anzeigen
  #9 (permalink)  
Alt 07-10-2006, 11:51
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von Koala
(string)'0X2BAD' weist ja dem Inhalt 0X2BAD den Typ String zu.

Dies ergibt true.

Und wenn ich eine Typ-Zuweisung mit einer anderen Typ-Zuweisung
vergleiche, dann ergibt das eben auch true.

Also in der if-Abfrage nicht die Zuweisung vergleichen,
sondern den Inhalt der Variablen.
nein
wenn du (string)23==(string)24 vergleichst bekommst du false, also kasting macht nur typeumwandlung und kann kein boolean liefern.
Problem ist, das bei 0X2BAD und 11181 handelt es sich um gleichen integer Wert nur eben anderes geschrieben und operator == vergleicht die Werte ohne rücksicht auf die typen.
das bedeutet, dass operator "==" versucht bei vergleich alle mögliche typeumwandlungen durchzutesten und bei erstem positivem vergleich true liefert, sonnst false.

Also meine meinung nach liegt es am ganz normalem gierigem verhalten von "==" operator.
als beweis:
if((string)"false" == (float)0)echo "stimmt?";
operator== ist eine function, die vergleich von 2 Werten ohne rücksicht auf die Type macht. das war schon immer so.
für die typen und werten vergleich gibt es operator===


Zitat:
Original geschrieben von 3DMax
du weißt schon, dass das hier ein php-forum ist?
ja
aber php ist in c geschrieben worden und operator == hat intern eine andere Name:
ZEND_API int compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)

du kannst auch Geburt von diesem operator nachvollziehen, wenn du die source dateien zend_operators.c und zend_operators.h anschaust
__________________
Slava
bituniverse.com

Geändert von Slava (07-10-2006 um 12:24 Uhr)
Mit Zitat antworten