2015-09-06 88 views
1

由于PHP手册在php中未声明的变量为什么通过错误?

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

如果是这样的话,为什么当它试图访问未初始化的变量时通过错误(通知)?像

echo $x; 

其下面的消息回报,即使在脚本

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

,但是当我宣布$x作为NULL那么它不是通过任何通知或错误和正常工作

$x = NULL; 
echo $x; 

现在我的问题是为什么它通过通知,如果不宣布像$x = NULL$x = ''虽然未申报变量初始化为NULL这是手册中明确提到?

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

+0

是否使用PHP的版本相同,你看手册? –

+0

尝试更改您的PHP版本 – aldrin27

+0

我正在使用php 5.6.8和在线手册中的报价。 –

回答

0

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

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

+0

,当$ x = NULL时,它保留了多少内存? –

+0

请检查此示例http://sandbox.onlinephpfunctions。com/code/ea22efd7e1c1c44bad9783d5ae3b155b3dea1332 –

0

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

2

嗯,我认为你需要更好地理解变量的生命周期。由于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以防止这些警告

+0

哪个会更快? 'isset($ x)'或'$ x = NULL'。任何想法?我的应用程序是实时的,所以性能无关紧要。 –

+0

当我测试两种情况时,结果都是相同的速度,每次执行140毫秒。你必须记住,在这两种情况下,只是测试是否有任何内存中的该点的引用。没有其他的 –