【发布时间】:2013-11-12 12:53:41
【问题描述】:
我已经考虑了一段时间。 $s1 设置在 foreach 循环中,可以在循环后访问,同时 $s2 设置在函数 say 中,因为它是局部变量,所以不能访问 after。我的问题是:迭代器中的变量是否考虑全局?
<?php
$systems = array('windows', 'mac', 'linux');
foreach ($systems as $s) {
$s1 = $systems[0];
}
echo $s1 . '<br />'; // Echo out "windows"
function say(){
$s2 = 'skynet';
echo $s2;
}
say(); // Echo out "skynet"
echo $s2; // Undefined variable
?>
【问题讨论】:
-
PHP 只有两种作用域:全局作用域和函数作用域。所以变量要么在函数中,要么是全局的。
-
foreach不是迭代器,它只是语言的循环语句。由于 PHP 不对变量进行块级作用域,因此在循环中创建的任何变量在循环之后也可以访问。 -
不,他们不是。您无法从 foreach 循环外部访问 $s 。但是,您可以访问在循环中创建的变量。
-
^ ummm ... 是的,你可以,在这种情况下,循环后回显
$s将输出“linux”。 -
这个问题似乎是题外话,因为它与manual 中现成的信息有关。