PHP: 循环中声明变量的正确方式

7

我有一个在循环中构建的变量,例如:

$str = "";
for($i = 0; $i < 10; $i++) $str .= "something";

如果省略 $str = "",我会收到未定义变量的通知,但是我认为 PHP 会自动声明变量,第一次看到未声明的变量时会这样做?
我应该如何正确处理?
4个回答

14

你因为将自己的值与其他值连接而得到未定义变量。

等同于

$str = $str . "something";

所以,它无法确定初始值是什么。这相当于:

$str = [未定义的值] . "something";

[未定义的值]"something"连接的结果是什么?解释器无法确定...

因此,您必须首先将""放入变量中以初始化变量的值,就像您所做的那样。

希望这有所帮助。


我曾认为变量的作用域也同样适用于循环,但是没错,你是对的,我现在明白原因了。+1 - Tarik

8
如果您真的需要让它更加清晰,可以这样做:
for($i = 0, $str = ''; $i < 10; $i++) $str .= "something";

但是你所拥有的,正是我通常所做的事情。vlceBerg 解释得很好。

1
只是一个想法...你能做到这个吗: for($i = 0, $str = ''; $i < 10; $i++, $str .= "something"); ? 我现在没有 PHP 环境来测试... - vIceBerg
1
显然是的:zsh%echo '<? for($i = 0, $str = ""; $i < 10; $i++, $str .= "something"); echo $str; ?>' | php somethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomethingsomething - Jonas Due Vesterheden
没错,vlceBerg - 你甚至不需要循环内容。我发现使用内容更容易理解,但既然只有一行,你并不需要这样做。 - Ross

4

最好不要使用自动声明功能 - 这就是为什么它会发出一个提示。提示是最低级别的警告,并且默认情况下不会显示。如果您打开提示,大多数旧的PHP应用程序将会发出许多提示。


2

PHP自动声明的变量会被注册为未定义,这就是您收到通知的原因。

一般来说,在使用变量之前最好先声明PHP变量,虽然我们中的许多懒惰者(包括我在内)并不总是这样做。


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