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