← Alle Artikel

PHP var_dump(0123)

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

// Nächster Schritt

Ähnliches Problem im eigenen Projekt?

Ich helfe gern weiter – schreiben Sie mir einfach, worum es geht.