PHP中的迭代器中的变量是全局的吗?

时间:2013-11-12 12:53:42

标签: php variables scope

我已经考虑了一段时间了。 $ 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

    ?>

4 个答案:

答案 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