mbr: Verhalten der Funktion ctype_digit()

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?

  1. //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 ;)

    1. 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.