没有必要在PHP中初始化变量,但它是一个 非常好的做法。未初始化的变量的默认值为 它们的类型取决于它们的使用环境 - 布尔值 默认为FALSE,整数和浮点数默认为零,字符串(例如 在echo中使用)被设置为空字符串,数组变为空 阵列。
我正在玩未经初始化的高尔夫变量,但该计划并没有达到我的预期。经过检查,我注意到这种奇怪的行为(所有使用的变量都是未初始化的):
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;
。
答案 0 :(得分:1)
来自manual:
注意:...递减NULL值也没有效果,但递增它们会导致1.
因此,unitialized变量获得NULL值。递增此值得到1(为NULL + 1)。但是,如文档中所述,尝试递减没有效果。
此外,相关主题中还有good explanation。
这似乎违反直觉,但它是该语言的打字模型的结果。因此,为了避免这种行为,请始终遵循良好实践:始终初始化变量并注意非数值的算术运算。