猿问

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

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

function foo () {
    global $var;
    // rest of code}

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

这做法不好吗?


饮歌长啸
浏览 396回答 4
4回答

沧海一幻觉

如果不小心使用全局变量,就会使问题更难找到。假设您请求了一个php脚本,并收到一个警告,表示您正在尝试访问某个函数中不存在的数组索引。如果要访问的数组是该函数的本地数组,则检查该函数,以查看是否在该函数中出错。这可能是函数输入的问题,所以您可以检查函数调用的位置。但是,如果该数组是全局的,则需要检查使用该全局变量的所有位置,不仅如此,还必须确定这些对全局变量的引用是按什么顺序访问的。如果代码中有全局变量,则很难分离该代码的功能。为什么要隔离功能?这样您就可以测试它并在其他地方重用它。如果您有一些代码不需要测试,也不需要重用,那么使用全局变量就可以了。

智慧大石

我要补充两件事:使用前缀,以便立即将其识别为全局(例如$g_)在一个地方声明它们,不要把它们分散在代码周围。向你问好,唐

婷婷同学_

谁能反对经验、大学学位和软件工程?不是我。我只想说,在开发面向对象的单页PHP应用程序时,当我知道可以从头构建整个程序而不必担心命名空间冲突时,我会感到更有趣。从零开始建造是许多人不再做的事。他们有一份工作,一个截止日期,一个奖金,或者一个值得关心的名声。这些类型倾向于使用大量预先构建的代码,风险很大,因此它们根本不能冒险使用全局变量。使用全局变量可能不太好,即使它们仅用于程序的全局区域,但我们不要忘记那些只想使用全局变量的人。找点乐子做点事.如果这意味着在全局命名空间中使用几个变量(<10),那么只能在程序的全局区域使用,所以就这样吧。是的,MVC,依赖注入,外部代码,等等。但是,如果您已经将99.99%的代码包含到名称空间和类中,并且外部代码是沙箱的,那么如果使用全局变量,世界就不会结束(重复一遍,世界不会结束)。通常,我不会说使用全局变量是不良做法..我想说的是,在程序的全局区域之外使用全局变量(标志等)是自找麻烦(从长远来看)不明智因为你很容易失去他们的状态。另外,我想说你学得越多,你就越不需要依赖。关于全局变量,因为您将体验到跟踪与其使用相关的bug的“乐趣”。这本身就会激励你寻找另一种方法来解决同样的问题。巧合的是,这会推动PHP人员学习如何使用名称空间和类(静态成员等.)。计算机科学领域广阔。如果我们吓跑每个人去做某事因为我们给它贴上标签坏的然后他们就失去了真正理解标签背后的推理的乐趣。如果必须使用全局变量,则使用全局变量,然后查看是否可以在没有它们的情况下解决问题。当您深入了解问题的真正本质时,冲突、测试和调试意味着更多,而不仅仅是对问题的描述。
随时随地看视频慕课网APP
我要回答