Verhalten der Funktion ctype_digit()
mbr
- php
Hallo Forum,
kann mir einer folgendes Verhalten erklären?
var_dump(ctype_digit($iId)); //ergibt true, wenn $iId == 80437, aber false, wenn $iId == 26171 - der Typ von $iId ist bei mir Integer
var_dump(ctype_digit('80437')); //ergibt true
var_dump(ctype_digit(80437)); //ergibt true
var_dump(ctype_digit(26171)); //ergibt false
PHP Version 4.3.3
ich verstehe ja, dass ctype_digit() einen String als Übergabeparameter erwartet und daher wahrscheinlich allergisch auf Integerwerte reagiert, aber was genau 80437 von 26171 unterscheidet ist mir rätselhaft ... Gibt es irgendeine Erklärung, oder ist das Verhalten bei einem falschen Typ des Übergabeparameters einfach undefiniert?
//ergibt true, wenn $iId == 80437, aber false, wenn $iId == - der Typ
Wenn $iId == 80437 true zurück gibt, kann $iId == 26171 nur false sein. *fg*
Hehehe ... kleiner Spaß!
Guck dir das mal an ctype-digit@php.net und da steht auch irgendwo:
"[...]the function only functions right when the argument is a string[...]"
Deswegen schlag ich dir eine Lösung von den Lösungen die da angeboten werden vor ;)
Hallo Jurik
Guck dir das mal an ctype-digit@php.net und da steht auch irgendwo:
"[...]the function only functions right when the argument is a string[...]"
Deswegen schlag ich dir eine Lösung von den Lösungen die da angeboten werden vor ;)
Danke für deine Antwort. Hab jetzt einfach beim Aufruf nochmal in einen String konvertiert.
[code lang=php]
if(!ctype_isdigit((string)$id)) {
//return false
} else {
//do something
}
[code]
Aber unabhängig von dieser Lösung würde mich einfach das Verhalten von ctype_isdigit() interessieren. Gibt es irgendein Muster, oder ist das Verhalten bei integern einfach zufällig?? - na vielleicht werde ich mir wirklich mal den C-Code von PHP anschauen... Falls ich noch irgendwas rauskriege, melde ich mich hier nochmal.