【问题标题】:Passing globals thru function arguments通过函数参数传递全局变量
【发布时间】:2013-02-28 00:08:29
【问题描述】:

1我知道从一开始这听起来很傻......

让我马上告诉你,这与The advantage / disadvantage between global variables and function parameters in PHP. asked right here on stackoverflow 不是同一个问题。在那里,提问者想知道本地变量与全局变量。在这里,全局变量与全局变量。我的问题是关于 PHP 处理全局变量访问和速度的内部方式。

这是一个问题,在下面的示例中,function_1 是否应该比 function_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. 全局变量不需要通过函数 args 传递,因为全局变量……是全局变量,因此无论如何都可以在任何地方访问它们。 最后,从语义的角度来看,通过函数参数传递一个全局变量是没有意义的,它把人们搞糊涂了。

这些都没有解决所提出的问题。

一切都与速度有关。

【问题讨论】:

  • 我相信这个问题已经回答了...stackoverflow.com/questions/2216340/…?
  • 只有在实际需要参考时才应使用参考 (&)。 永远不要使用它们来加速你的代码。用于加速代码的引用的情况已得到修复,现在 PHP 会自动处理它。
  • @niacurshi 不完全是。他们讨论的鼻涕完全一样。本地变量与全局变量实现的问题。在我问我的问题之前,我已经看过那个帖子。谢谢你的参考。
  • @SverriM.Olsen 感谢您对奥尔森的评论。但是,这种改进与 copy on write 的问题有关,因为这篇文章 (thedeveloperday.com/php-lazy-copy) 很好地涵盖了它。我的问题探讨了不同的观点。
  • @AverageJoe 啊,好的。但无论如何,真的值得花时间在这上面吗?速度差异是如此之小,以至于可能甚至无法测量。

标签: php global


【解决方案1】:

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

【讨论】:

  • 请参阅我的免责声明。使全局变量变慢的原因不是函数中的全局键,它强制 PHP 检查全局名称空间中是否存在全局变量吗?如果是这样,是否会一起避免全局键并直接从一开始就提供内存引用会快两倍?
  • 如果变量已经是全局变量,那么不妨使用它。如果变量从本地传递到函数,那么您无法以任何其他方式访问该信息。将全局作为参数传递给看到全局的函数不会更快,因为您仍然必须获得该全局,除非现在您添加一个隐式局部变量以及存储全局值。
  • 当你这么说because you still have to obtain that global,时,我要失去你了。我不是通过引用传递了全局吗?我们只是给 PHP 准确的内存地址?那么有什么可以获得的呢?已经拿到了。这正是我的问题的重点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
  • 2011-10-25
  • 2017-03-08
  • 1970-01-01
相关资源
最近更新 更多