The PHP manual says:Uninitialized Variablen in PHP
Es ist nicht notwendig Variablen in PHP zu initialisieren aber es eine Praxis sehr gut. Nicht initialisierte Variablen haben einen Standardwert von ihren Typ abhängig von dem Kontext, in dem sie verwendet werden - booleans Standard auf FALSE, Integer und Floats standardmäßig auf Null, Zeichenfolgen (zB in Echo verwendet) werden als leere Zeichenfolge und Arrays werden zu einem leeren Array.
Ich spielte mit nicht initialisierten Variablen für Golf, aber das Programm hat nicht getan, was ich erwartet hatte. Bei der Untersuchung bemerkte ich dieses seltsame Verhalten (alle verwendeten Variablen sind nicht initialisierten):
php > $a = $a + 1;
PHP Notice: Undefined variable: a in php shell code on line 1
php > $b = $b - 1;
PHP Notice: Undefined variable: b in php shell code on line 1
php > $c++;
PHP Notice: Undefined variable: c in php shell code on line 1
php > $d--;
PHP Notice: Undefined variable: d in php shell code on line 1
php > var_dump($a);
int(1)
php > var_dump($b);
int(-1)
php > var_dump($c);
int(1)
php > var_dump($d);
NULL
+ 1
, - 1
und ++
Arbeit, wie im Handbuch beschrieben. --
jedoch nicht.
$a
, $b
und $c
kann zum Zählen verwendet werden, danach. Aber $d--;
, ändert sich nicht $d
Wert, weil $d
NULL
ist.
Warum ist $d
auf NULL
eingestellt, nicht auf -1
?
Präfix Operatoren liefert die gleichen Ergebnisse, btw .: Die Variable 1
für ++$v;
gesetzt ist, aber auf NULL
für --$v;
.
Das Dekrementieren einer Variablen unterscheidet sich also von der Subtraktion von 1, oder? Andernfalls würde '$ v = $ v - 1;' auch '$ v' auf' NULL' setzen. Können Sie das näher erläutern und vielleicht auch erläutern, wie das beschriebene Verhalten eine Folge des PHP-Tippmodells ist? –
> Dekrementieren einer Variable unterscheidet sich von Subtraktion 1 - genau – Timurib
Leider weiß ich nicht _Why_ NULL Werte verhält sich so mit Dekrement. Vielleicht hat gerade jemand entschieden, dass es so sein sollte :) – Timurib