| | | | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Erfahrener Benutzer Registriert seit: 17.01.2006
Beiträge: 468
![]() | du hast es richtg bemerkt (string)"0XABBA"==(int)"43962" liefert TRUE weil 0xABBA ist einfach hexadezimale darstellung von 43962 0xABBA==43962 ist also true. und wie erwartet pfeift operator "==" auf die datentüpen von Variablen da seine Aufgabe ist ein Vergleich ohne rücksicht auf die typen durchzuführen. das bedeutet also, dass intern mcht er aus dem string "0xABBA" ein int und vergleicht diesen int wert mit dem int wert von 43962 etwa so if(intval(0xABBA)===intval("43962")) was natürlich TRUE liefert. vergleich mit dem array war natürlich ein trik da wir in wirklichkeit if(TRUE==array(egalwas)) abgfragt haben und das hat uns true geliefert |
| |
| | ||
| Erfahrener Benutzer Registriert seit: 17.01.2006
Beiträge: 468
![]() | Zitat:
Also die datentypen, die du übergibst sind ihm egal, er macht alle Typumwandlungen intern um eine gleichheit zwischen variablen zu finden. aus diesem grund liefert if("23"==23) ein true weil dtentypen für operator "==" keine rolle spielen. | |
| |
| | |
| Erfahrener Benutzer | Na weil dem == der Typ egal ist. Mit (string) wird zwar der String als String betrachtet (also eigentlich überflüssig), dann aber für den Vergleich in eine Zahl konvertiert. Und "0xabba" ist eben 0xabba = 43962, was somit == (int)"43962") ist. Das alles ist Auswuchs des total kranken Typ-Konzepts. Bzw. des fehlenden Typ-Konzepts. Da Variablen keinen Typ haben, musst Du eigentlich vor dem Vergleich erst mal sicherstellen, dass wirklich Strings oder Integer enthalten sind. Wenn ich "0xABBA" schreibe, meine ich eine Zeichenkette. Keinen Zahlenwert. Und wenn ich dann ne Variable habe, wo 43962 drinsteht, ist das für mich ungleich. Für PHP ist es gleich. Ich bin überzeugt, dass man sich mit diesen automatischen alles-in-alles-konvertierereien mehr Ärger einfängt, als man sich an Tipparbeit spart. @slava: Mach mal "023" == 023
__________________ ********************************** Nein, ich bin nicht die Signatur. Ich putze hier nur. ********************************** |
| |
| | |
| Erfahrener Benutzer | Natürlich ist das kein Bug. Es ist einfach nur Mist! Bei der automatischen Konvertierung werden ganz andere Regeln verwendet als wenn man die Zahl einfach hinschreiben würde. Da gibt es glaub ich auch irgnedein Binärformat. Einfach nur gruselig sowas. Erst bietet man faulen Benutzern an, sie müssen nicht so genau auf die Typen achten, weil sowieso alles von hinten bin vorne automatisch hin und her konvertiert wird. Und dann wird es abhängig vom Typ unterschiedlich gemacht. Genauso krank ist die Implementierung von empty. Warum um alles in der Welt ist ein String, der eine Ziffer enthält denn empty??? Nur weil diese Ziffer zufällig die 0 ist.... Aaaarrrrggggggg!!!
__________________ ********************************** Nein, ich bin nicht die Signatur. Ich putze hier nur. ********************************** |
| |
| | |
| Erfahrener Benutzer | Jaaaaaa, ich habs ja verstanden (scho die ganze Zeit :P) Hab bloss verpennt, dass wegen 0x der String als Hex-Wert betrachtet wird ^^ Code: 0xabba = 43962 PHP-Code:
__________________ Nicht jeder Fehler ist ein Bug. |
| |
| | |
| Moderator und Wett-König | Hallo zusammen, ich denke die Type-Diskussion ist damit geklärt. @brian johnson: Ist dein Problem nun geklärt?
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> Adventure PHP Framework (APF))! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| Themen-Optionen | |
| Thema bewerten | |
|
|

Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.