在php中未声明的变量为什么通过错误?

时间:2015-09-06 11:46:53

标签: php

如php手册中所述

  

没有必要在PHP中初始化变量,但这是一个非常好的做法。未初始化的变量具有其类型的默认值,具体取决于使用它们的上下文 - 布尔值默认为FALSE,整数和浮点数默认为零,字符串(例如,在echo中使用)设置为空字符串,数组变为空阵列

如果是,那么为什么在尝试访问未初始化的变量时会出现错误(通知)?像

echo $x;

即使在消息

之后的脚本中也会返回
  

注意:未定义的变量:x ...

但是当我将$x声明为NULL时,它不是通过任何通知或错误而且工作得很好

$x = NULL;
echo $x;

现在我的问题是为什么如果没有宣布像$x = NULL$x = ''那样通知,尽管未声明的变量初始化为NULL,这在“手册”中有明确提及? ?

我有一个脚本和许多未初始化的变量,并遇到了这个问题。

3 个答案:

答案 0 :(得分:3)

我认为您需要更好地了解可变生命周期。由于PHP是运行时解释语言使用后期绑定;例如:

$null=null;
$empty="";
$true=true;
unset($undefined);

这将导致:

isset($undefined): false
empty($undefined): true
is_null($undefined): true

isset($null): false
empty($null): true
is_null($null): true

isset($empty): true
empty($empty): true
is_null($empty): false

isset($true): true
empty($true): false
is_null($true): false

从中可以看出,从空变量到未定义的变量没有区别。

解决方案:

使用isset来阻止这些警告

答案 1 :(得分:0)

我认为如果你用$ x uninitialized throws做回音警告,因为这些变量没有任何内存储备。

在另一种情况下,当你执行$ x = null时,你会为$ x变量保留内存,尽管你没有给它赋值。

答案 2 :(得分:0)

声明和初始化之间存在巨大差异。你需要在使用它之前声明一个变量,但是你不必对它进行初始化。