PHP中是否需要初始化/声明变量?

38

在循环或函数之前是否需要初始化/声明变量?

无论我是否在之前初始化/声明变量,我的代码仍然可以工作。

我正在分享演示代码以说明我的意思:

$cars = null;

foreach ($build as $brand) {
     $cars .= $brand . ",";
}

echo $cars;

或者

foreach ($build as $brand) {
     $cars .= $brand . ",";
}

echo $cars;

这两段代码对我来说都是一样的,那么在开始时初始化/声明一个变量是必要的吗?

3个回答

50

虽然PHP不需要,但最好始终初始化您的变量。

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

因此,总之,在我的意见中,始终为您的变量设置默认值。

P.S. 在您的情况下,该值应设置为空字符串"",而不是null,因为您正在将其与其他字符串连接起来。

编辑

正如其他人(@n-dru)所指出的那样,如果您没有设置默认值,则会生成一个通知。


空值和空字符串""...它们不是一样的吗? - Omer
6
不,它们不相同。一个是字符串类型,另一个为 null。 当使用 is_null 函数进行测试时,可以看出它们之间的区别。is_null($null) // 返回 true 并生成一个提示 empty("") // 返回 true - Alexander
那么你的意思是 NULL = 未分配,"" = 空字符串? - Omer
我认为在PHP中不存在未分配的变量这种事情。变量是在第一次使用它们时创建的。如果您使用尚未创建的变量,则默认情况下具有空值。"" 是一个空字符串,没错。您应该知道 empty 函数在几种情况下返回 true(空字符串、false、null、不存在的变量)。 - Alexander
1
自 PHP 8 开始,如果您没有设置默认值,将会生成“警告”!更多细节请参阅:https://www.php.net/manual/en/migration80.incompatible.php - Mohsen Haeri

21

最好将其赋值为空字符串 $cars = '';,否则(如果您开启了错误报告)可能会看到一个提示:

注意: 未定义变量:$cars

PHP 将假定它是空的,结果字符串将是相同的,但您应该避免造成需要记录该提示的额外开销。因此,就 性能 而言,最好首先将其赋为空。

此外,使用像 Aptana 等编辑器时,您可能希望按下 F3 查看给定变量来自哪里。有一个明显的变量的出现位置也是非常方便的。因此,就 调试 而言,也最好有一个明显的变量初始化位置。


0

这要看情况:如果你在函数外声明一个变量,它具有“全局作用域”,这意味着它只能在函数外部访问。

如果在函数内部声明变量,则它具有“局部作用域”,只能在该函数内部使用。 (http://www.w3schools.com/php/php_variables.asp)

但是似乎你在函数外定义的变量“cars”即使没有使用全局关键字也可以在函数中使用...


7
首先请注意,贴出的代码中没有声明任何函数。因此,没有使用global关键字的范围。在回答问题之前,您应该理解被问的内容。另外,您所写的内容非常具有误导性。我建议您参考http://php.net/manual/en/language.variables.basics.php 了解PHP变量。 - Blip

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接