在PHP中定义一个全局变量

最后发布: 2011-03-15 19:40:42


问题

我想在我的foreach之外使用一个变量。 如何在PHP中解决该问题。 如何在foreach之外使用$ ID?

foreach($row as $key => $value) {
  $ID = $value['Id'];
}
php mysql
回答

您的$ID变量已经可以在您的foreach之外使用:控制结构没有它自己的变量作用域


作为快速说明,下面的代码部分:

$ID = 0;

$array = array(1, 2, 3);
foreach ($array as $value) {
    $ID = $value;
}

var_dump($ID);

会让你:

int 3

这表明在foreach循环内使用的$I D变量与该循环外存在的变量相同。



在评论后编辑:

如果没有在循环之前初始化变量,您将得到完全相同的结果:该变量将在首次使用时创建-并且其作用域与我发布的示例相同。


现在foreach一个例子,在foreach循环中使用一个函数(仅适用于PHP> = 5.3)

$array = array(1, 2, 3);
foreach ($array as $value) {
    $func = function () use ($value) {
        $ID = $value;
        var_dump($ID);
    };
    $func();
}

var_dump($ID);

在那里, $ID变量不会在循环之前初始化-它是在循环内部的函数中创建的。

此示例将获得以下输出:

int 1
int 2
int 3

( ! ) Notice: Undefined variable: ID ... on line 15

null

基本上:

  • 您从函数内部获得了三个正确的输出
    • 这些显示匿名函数内部的$ID变量正在获取值
  • 但是,在循环之后,您会注意到: $ID变量不存在。
    • 这表明, $ID在函数内部创建的变量是不一样的$ID的功能外变量:功能带有自己的变量范围。


回答

您可以在foreach之外使用它,变量范围不受语句结构的限制。

另一方面,它们受功能范围的限制。

请参阅手册http://php.net/manual/en/language.variables.scope.php上的此页面,以获取有关变量范围的更多信息。


回答

$ID = null;
foreach($row as $key => $value) {
  $ID = $value['Id'];
}
//do something with $ID...

这样做的原因是,如果永远不会通过for循环(即$ row是一个空数组),就不会设置$ ID。 因此,必须预先设置$ID ,否则它将根本不在范围内,如果尝试访问$ID的值,则会遇到错误。


回答

在foreach循环中包含变量确实会影响其范围。 您可以在所需的foreach循环之前,之后或之中随意操作该变量。


回答

将所有值依次分配给单个变量没有多大意义。
如果只想要最后一个,可以用

$value = array_pop($row);
$ID = $value['Id'];

但我怀疑那是您真正需要的。 您要解决的整个任务是什么? 可能需要数组吗?

$id_arr = array();
foreach($row as $key => $value) {
  $id_arr[] = $value['Id'];
}