通过函数参数传递全局变量


Passing globals thru function arguments

我知道这听起来可能很傻…

,让我马上告诉你,这与PHP中全局变量和函数参数的优缺点不同。这个问题就在stackoverflow上。在那里,提问者想知道本地变量和全局变量。这里,全局变量vs全局变量。我的问题是关于PHP处理全局变量访问和速度的内部方式。

下面是一个问题,在下面的例子中,函数_1应该比函数_2运行得快吗?

function function_1 ( &$global_variable_x) {
    //do something with $global_variable_x
}

function function_2 () {
    global $global_variable_x;
    //do something with $global_variable_x
}

让我强调一下它们的区别…

在情况1中,您在函数参数中传递全局变量,不仅如此,您通过ref传递它,因此内存位置直接传递给PHP。由于这个技巧,不需要在函数中使用global关键字,并且由于这个事实,PHP不需要花费时间在全局名称空间中查找全局名称。那么问题是为什么不这么做呢?肯定会更快,不是吗?

当然,很容易误解这个问题,并陷入讨论

的日常琐事中。
  1. 全局变量是坏的
  2. 全局变量不需要通过函数参数传递,因为全局变量…都是全局的,所以无论如何都可以在任何地方访问它们。最后,从语义的角度来看,通过函数参数传递全局变量是没有意义的,它会让人感到困惑。

这些都不能解决所问的问题。

一切都与速度有关。

如果它是全局的,那么将它用作可以看到该全局的函数的参数是没有意义的。它要么1)不会更快,要么2)运行速度只会慢一点,3)运行速度只会快一点点,其原因将违背形式逻辑。