PHP 中的全局变量是否被视为不良做法?如果是,为什么?

2022-08-30 07:55:15
function foo () {
    global $var;
    // rest of code
}

在我的小型PHP项目中,我通常采用程序化方式。我通常有一个包含系统配置的变量,当我在函数中访问此变量时,我会这样做。global $var;

这是不好的做法吗?


答案 1

当人们在其他语言中谈论全局变量时,它的含义与PHP中的含义不同。这是因为变量在PHP中并不是真正的全局变量。典型的 PHP 程序的作用域是一个 HTTP 请求。会话变量实际上比 PHP“全局”变量具有更广泛的范围,因为它们通常包含许多 HTTP 请求。

通常(总是?)您可以在如下方法中调用成员函数:preg_replace_callback()

preg_replace_callback('!pattern!', array($obj, 'method'), $str);

有关详细信息,请参阅回调

关键是对象已经被固定在PHP上,并且在某些方面会导致一些尴尬。

不要过分关注将不同语言的标准或构造应用于PHP。另一个常见的陷阱是试图通过将对象模型放在所有东西之上来将PHP变成纯OOP语言。

像其他任何东西一样,使用“全局”变量,过程代码,特定框架和OOP,因为它有意义,解决了问题,减少了你需要编写的代码量,或者使它更易于维护,更容易理解,而不是因为你认为你应该这样做。


答案 2

如果不谨慎使用全局变量,可能会使问题更难发现。假设您请求一个php脚本,并且您收到一条警告,指出您正在尝试访问某个函数中不存在的数组的索引。

如果您尝试访问的数组是函数的本地数组,请检查该函数以查看是否犯了错误。这可能是函数输入的问题,因此请检查调用函数的位置。

但是,如果该数组是全局的,则需要检查使用该全局变量的所有位置,不仅如此,还必须确定访问这些对全局变量的引用的顺序。

如果一段代码中有一个全局变量,则很难隔离该代码的功能。为什么要隔离功能?因此,您可以对其进行测试并在其他地方重复使用。如果你有一些不需要测试的代码,也不需要重用,那么使用全局变量是可以的。


推荐