Die aktuellste Version von PHP (Abkürzung für “Hypertext Preprocessor”) ist v7.1.2 [php7].
Seit dem Start im Jahr 1995 [php1] hat sich einiges Getan. Anfangs nur als Script-Sprache gedacht, hat es sich zu einer typen sicheren Programmiersprache entwickelt.
In PHPv5 ist es nicht möglich in einem Methodenparameter auf ‘int’, ‘string’ oder ‘array’ zu prüfen.
Beispiel:
public function getBar($foo) { print $foo; }
Die Variable $foo kann in dem Fall jedem Typ entsprechen. Sollen nur ‘int’ oder ‘strings’ erlaubt sein, dass muss im Methoden-Rumpf mittels ‘is_int’ oder ‘is_string’ geprüft werden.
In PHPv7 ist das nun möglich. Hierzu auch ein Beispiel:
public function getBar(int $foo) { print $foo; }
Hier wird direkt schon bei den Übergabe geprüft, ob der Wert dem Typ eines Integers entspricht. Falls nicht, wird eine Fehlermeldung produziert.
Nun zum eigentlichen Problem vom Ergebnis von var_dump(0123)
Das Ergebnis lautet ‘int(83)’. Warum?
Die führende 0 weist dem Interpreter an von Dezimal auf Oktal umzustellen. Die Basis ist nun nicht mehr 10, sondern 8.
Ein anderes Phänomen erreicht man mit diesem Ausdruck ‘var_dump(0x123)’. Das Ergebnis lautet ‘int(291)’. Hier wird in Hexadezimal gerechnet.
Die Ursache liegt im Kern von PHP. Jede Version von PHP baut auf die Programmiersprache C auf [C].
[php1] http://de1.php.net/manual/de/history.php.php[php7] http://php.net/
[C] https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/BitOp/hexoctal.html
Leave A Comment