Php 为什么是varibale;空";而不是没有定义?

Php 为什么是varibale;空";而不是没有定义?,php,Php,我本来希望看到一个像PHP通知:Undefined variable:a这样的通知,但是当我运行这段代码时,它工作得非常好。此外,变量变为NULL。为什么? <?php function($a = 1) use (&$a) {}; var_dump($a); // NULL <---- Expected a Notice "undefined", got "NULL" 我认为&操作符会在变量不存在的情况下以静默方式创建该变量: 如果您通过引用分配、传递或返

我本来希望看到一个像PHP通知:Undefined variable:a这样的通知,但是当我运行这段代码时,它工作得非常好。此外,变量变为NULL。为什么?

<?php

    function($a = 1) use (&$a) {};
    var_dump($a); // NULL <---- Expected a Notice "undefined", got "NULL"

我认为
&
操作符会在变量不存在的情况下以静默方式创建该变量:
如果您通过引用分配、传递或返回未定义的变量,它将被创建。
,因此当您使用(&$a)
时,
&
会看到
$a
不存在,并创建它

至于
未定义的
,这在PHP中不是真正的类型。(例如,与javascript不同,javascript实际上有一个名为undefined的类型和一个名为null的单独类型)


为什么为空?鉴于
未定义的
不存在,这是初始值的唯一逻辑选择,您希望它初始化为什么?

“如果您不使用默认值初始化变量,PHP将根据您使用变量的方式进行类型转换。这有时会导致意外行为。”

有一个-
在PHP中不需要初始化变量,但这是一个非常好的实践。
PHP将在使用变量时定义一个变量,如果它还没有定义exist@MarkBaker它会,但它总是会添加一个警告,在我的情况下我看不到。@MarkBaker tbh,但是,它没有解决问题:为什么行为不同。@Axalix在第二种情况下,您没有从全局范围解决
$b
变量。一开始你是这样做的。这很有趣,我认为这只是一个指向已经存在的东西的指针。虽然它仍然有点奇怪,但它创建它并用NULL初始化它。问题不是关于
未定义的
类型,而是关于一个通知
PHP通知:未定义的变量
@Axalix它是一个引用。对于某个地方引用的引用,应该对其进行定义。你之所以看到这个通知,是因为在第二种情况下,你没有定义一个变量(无论是显式的还是隐式的)@zerkms“用于引用应该定义的地方”——我100%同意这一点;因为它是未定义的,所以抛出一个错误会更有意义。。。我真的很惊讶这样可以创建一个变量。是的,我也是。我更喜欢在我面前出现一个例外,而不是默默地创建新的变量,例如,如果我输入了一个错误。。。但别费心让他们去修理,他们会“东拉西扯”