dedlfix: ist ganzzahlig?

Beitrag lesen

echo $begrüßung;

ich würde es einfach mit der funktion is_int() versuchen. damit wird geprüft, ob die zahl integer (also ganzzahlig ist).

Nein, diese Funktion prüft, ob eine Variable oder ein Ausdrucks vom Typ Integer ist, nicht ob ihr Inhalt einem Integerwert entspricht.

beispiel
is_int(4/2) = true
is_int(3/2) = false

is_int(0.5 + 0.5) = false, da das Ergebnis von 0.5 + 0.5 zwar ein Integerwert ist, aber als  float(1) vorliegt.
is_int('1') = false, da es sich hierbei um den Typ String handelt.

Durch PHPs automatische Typumwandlung wird ein Vergleich auf Integer nicht gerade sehr einfach (wenn man nicht ctype_digit() verwendet):

var_dump('1abc' == intval('1abc')); => true
var_dump('1abc' == (int)'1abc'); => true

oder auch

var_dump('1x' == intval('1u')); => true
var_dump('1x' == (int)'1u'); => true

Auch der typstrikte Vergleich === ist hier nicht sehr brauchbar, wenn man in Strings enthaltene Zahlen prüfen will (z.B. Werte aus Eingabefeldern, die immer als String geliefert werden).

var_dump('1' === intval('1')); => false

Als Lösung plädiere ich auf einen erzwungenen Integerwert mittels intval() (liefert 0 oder die aus dem Argument gewonnene Zahl) oder eine Musterprüfung mittels ctype-Funktion oder RegExp.

echo "$verabschiedung $name";