2016-12-24 106 views
4

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的价值,因为$dNULL

为什么$d设置为NULL而不是-1

使用前缀运算符得到相同的结果,顺便说一句:该变量设置为1++$v;NULL--$v;

回答

1

manual

注:......递减NULL值也没有效果,但是递增结果在1

因此,未初始化变量得到一个NULL值。递增这个值得到1(如NULL + 1)。但如文档中所述,尝试减量不起作用。

此外,在相关主题中还有一个非常有用的good explanation

这似乎违反直觉,但它是语言的打字模型的结果。所以,为了避免这种行为,只要始终遵循良好的做法:始终初始化一个变量,并注意非数字值的算术运算。

+0

因此递减一个变量不同于从它减去1,不是吗?否则,'$ v = $ v - 1;'会将'$ v'设置为'NULL'。您能否详细说明这一点,并且可能还详细说明了所描述的行为是如何由PHP的打字模型造成的? –

+0

>递减的变量是减1的不同 - 这正是 – Timurib

+0

不幸的是,我不知道_why_ NULL值与减量的行为等等。也许只是有人决定应该这样:) – Timurib