0

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

    ?>
4

4 回答 4

1

在php中有两种类型的变量:

  • 函数变量
  • 全局变量
于 2013-11-12T12:57:15.970 回答
1

不,在您的上下文$s1中不是全局的,它只是与您的打印线处于同一级别。否则,您的$s2var 是私有的,并且仅存在于say()函数内部。

于 2013-11-12T12:58:03.973 回答
0

当您声明一个迭代器时,例如foreach(),那么代码将在运行时执行。

当您声明 afunction()时,代码不会在运行时执行。它只会在您调用该函数时运行。

这就是为什么$1定义,但$2不是。

函数(或类方法)中的变量总是局部的。

于 2013-11-12T12:57:08.610 回答
0

如果您声明global $s1;,则 $s1 是全局的。否则,它不是全局的。如果它不是全局的,那么它只能从定义它的同一范围内访问。简单来说,如果你写$x=1,那么你可以$x从除内部函数之外的任何地方获取 的值,直到你定义它的函数结束。

你所有的答案都在这里: http: //php.net/manual/en/language.variables.scope.php

于 2013-11-18T14:10:22.383 回答