PHP中未初始化的变量

时间:2016-12-24 11:34:54

标签: php initialization

The PHP manual says

  

没有必要在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;

1 个答案:

答案 0 :(得分:1)

来自manual

  

注意:...递减NULL值也没有效果,但递增它们会导致1.

因此,unitialized变量获得NULL值。递增此值得到1(为NULL + 1)。但是,如文档中所述,尝试递减没有效果。

此外,相关主题中还有good explanation

这似乎违反直觉,但它是该语言的打字模型的结果。因此,为了避免这种行为,请始终遵循良好实践:始终初始化变量并注意非数值的算术运算。