在PHP中,在函数外使用global关键字

14

众所周知,全局关键字可以使得变量(或对象、数组)在当前函数中可见。

<?php

$some_var = 'some string';

function __test(){
    global $some_var;
    echo $some_var; // some string
}

但是一些开发人员仍然在函数之外使用全局关键字,乍一看对我来说毫无意义。

那么问题是:在函数之外使用“global”关键字有意义吗?


你确定正在使用的范围吗? - John Conde
我在index.php文件中看到了“global $some_var”的代码 - 确实它永远不会在任何函数内部。我对其作用域非常确定。 - Yang
@metal_fan 我猜你看到了一个函数在另一个文件中的实现细节。 - Sampson
2个回答

17

根据文档

在函数外使用 global 关键字不会报错。如果文件从函数内部包含,则可以使用它。

实际上,你可以将函数的主体放在不同的文件中,然后将其包含到函数中。如果只查看函数的主体,会给人留下使用全局变量在函数外部的印象,但事实是,当解释这段代码时,它将在函数内部被解释。

$name = "Jonathan";

function doSomething () {
  include( 'functionGuts.php' );
}

我们的functionGuts.php文件的内容可能是:

global $name;
echo "Hello, " . $name;

单独查看 functionGuts.php 时,会给人一种使用 global 在函数外部的印象,但实际上它是这样使用的:

$name = "Jonathan";

function doSomething () {
  global $name;
  echo "Hello, " . $name;
}

1

在函数外使用全局关键字不会起到任何作用,但该文件可能被包含在函数内部。

我使用它的另一个原因是使我的代码更易读和更有结构性。对于任何我想要在函数中访问的变量,我都会在主文件中使用global进行声明,这样只需快速浏览一下,我就知道它被引用为全局变量。(这意味着不要随意重命名,因为其他地方可能会使用... :))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接