是 PHP 全局迭代器中的变量


Are variables in iterators in PHP global?

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