2011-05-10 43 views
1

我想用这样的代码:没有定义奇怪的空问题

$arr=array('a'=>$a); 

$a,所以我得到的错误。但如果我之前写这个代码

if (!isset($a)) 
$a=null; 

所有的作品。为什么? $a开头没有定义,所以$a=null。或underfined!=NULL

+0

尝试'var_dump($ a)'; – diEcho 2011-05-10 07:25:31

+0

我收到未定义的变量 – kusanagi 2011-05-10 07:26:39

+0

是您的错误只是一个通知? – 2011-05-10 07:27:58

回答

6

当你写

array("a"=>$a) 

这意味着你想要的关键“一”是指一个名为变量引用$一个不首先存在这样你得到一个错误;但是当你添加

$a=null; 

手之前,虽然你设置$一个为空,但实际上你正在创建一个名为$多数民众赞成由PHP已知的所以不会有错误的变量引用。

+2

换句话说,PHP有一个包含所有变量及其值的内部表(实际上,几个表对于每个函数范围都有一个表,但除此之外)。当你的代码对某个变量做某些事情时,PHP会在表中查找它的值。如果它不在那里,你会得到错误,并且该值被假定为'null'。但是'$ a = null'将变量名添加到表中,并将该值明确地设置为'null'。 – 2011-05-10 07:36:23

-1

看到manual of isset

返回true变种存在,并且具有比其他NULL值 ,FALSE 否则。

+0

为什么downvote ???请解释 – diEcho 2011-05-10 07:51:56

3

是的,说实话undefined!= null,虽然差别只在PHP的眼睛,当它决定是否抛出异常与否。否则,它是一回事。

3

正如您已经发现undefined与null不同。

未定义表示名称$ a尚未纳入函数/代码的范围。 $a=null是分配给变量的(否)值。

顺便说一句,你应该得到一个通知,而不是一个错误,因为使用未定义的变量作为右值php警告你可能的错字,并继续脚本执行。作为一个经验法则,如果您在赋值(=)simbol(左值名称)的左侧处理一个未定义的变量,则php会创建一个新变量名称并将其绑定到当前作用域中,如果参考是在右边(你使用的是包含的值而不是变量本身)PHP警告你并继续前进。您可以通过error_reporting函数更改此行为。