The PHP manual says:未初始化的变量是在PHP
这是没有必要的初始化在PHP变量,但这是个非常 好的做法。未初始化的变量具有 的默认值,这取决于它们被使用的上下文中它们的类型 - 布尔 默认为FALSE,整体和漂浮默认为零,字符串(例如 在回声中使用)被设置为一个空字符串和数组成为到一个空的 数组。
我正在玩高尔夫的未初始化变量,但程序没有做我期望它做的事情。经审查,我注意到了这个怪异的行为(所有的变量都初始化):
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
,并++
工作按照手册中的描述。但是,--
不。
$a
,$b
和$c
可以用于后续计数。但$d--;
,不会改变$d
的价值,因为$d
是NULL
。
为什么$d
设置为NULL
而不是-1
?
使用前缀运算符得到相同的结果,顺便说一句:该变量设置为1
为++$v;
但NULL
为--$v;
。
因此递减一个变量不同于从它减去1,不是吗?否则,'$ v = $ v - 1;'会将'$ v'设置为'NULL'。您能否详细说明这一点,并且可能还详细说明了所描述的行为是如何由PHP的打字模型造成的? –
>递减的变量是减1的不同 - 这正是 – Timurib
不幸的是,我不知道_why_ NULL值与减量的行为等等。也许只是有人决定应该这样:) – Timurib