在PHP中定义一个全局变量

use*_*001 0 php mysql

我想在我的foreach之外使用一个变量.我怎样才能在PHP中解决这个问题.如何在foreach之外使用$ ID?

foreach($row as $key => $value) {
  $ID = $value['Id'];
}
Run Code Online (Sandbox Code Playgroud)

Pas*_*TIN 5

您的$ID变量已经可以在您的外部使用foreach:控制结构没有自己的变量范围.


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

$ID = 0;

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

var_dump($ID);
Run Code Online (Sandbox Code Playgroud)

会得到你:

int 3
Run Code Online (Sandbox Code Playgroud)

这表明$Iforeach循环中使用的D变量与该循环外部存在的变量相同.



评论后编辑:

不在循环之前初始化变量,你会得到完全相同的结果:变量将在第一次使用时创建 - 并且它将与我发布的示例中的变量相同.


另一个例子,现在,在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);
Run Code Online (Sandbox Code Playgroud)

在那里,$ID变量在循环之前没有被初始化 - 它是在循环内部的函数中创建的.

此示例将获得以下输出:

int 1
int 2
int 3

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

null
Run Code Online (Sandbox Code Playgroud)

基本上:

  • 从函数内部得到三个正确的输出
    • 那些显示$ID变量,在匿名函数内,正在获得一个值
  • 但是,在循环之后,您会收到通知:该$ID变量不存在.
    • 这表明$ID函数内部创建的$ID变量与函数外部的变量不同:函数带有自己的变量范围.