我已经考虑了一段时间了。 $ s1在foreach循环中设置并且可以在循环之后访问,同时$ s2在函数中设置,并且因为它是局部变量而无法访问。我的问题是:迭代器中的变量是否考虑全局?
<?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
?>
答案 0 :(得分:1)
在php中有两种类型的变量:
答案 1 :(得分:1)
不,在您的上下文中$s1
不是全局的,它只是与您的打印行处于同一级别。否则,您的$s2
var是私有的,仅存在于say()
函数内。
答案 2 :(得分:0)
当你声明一个迭代器,例如foreach()
时,代码将在运行时执行。
声明function()
时,代码不会在运行时执行。它只会在你调用函数时运行。
这就是定义$1
的原因,但$2
不是。
函数(或类方法)中的变量始终是本地的。
答案 3 :(得分:0)
如果您声明global $s1;
,那么$ s1是全局的。否则,它不是全球性的。如果它不是全局的,则只能从定义它的同一范围访问它。简单来说,如果你写$x=1
,那么你可以从除内部函数之外的任何地方获得$x
的值,直到你定义的函数结束。
您的所有答案都在这里:http://php.net/manual/en/language.variables.scope.php