【问题标题】:Passing arguments Byreference for speed & effciency purposes传递参数 Byreference 以提高速度和效率
【发布时间】:2012-08-22 06:00:25
【问题描述】:

将参数传递给函数时,如果函数不应该更改该参数的值,则约定是按值传递。仅当函数要修改该变量时,我们才传递 &byref。

另一方面,我们知道当通过引用传递时,PHP 使用指针,而不是像通过值传递那样复制变量的副本。

这在我的脑海中提出了一个问题,我们是否应该不时通过引用将某些变量传递给我们的函数以达到速度和效率的目的——即使我们不需要修改它们。

我不想对这个想法发疯并完全滥用它,我想为我在这里谈论哪些变量或哪种变量提供一个参考框架。

它们主要是 $dbh(数据库句柄)和非常大的变量。说实话,只是 $dbh 的!真的。

在您看来,您认为这是一种很好的做法,还是您认为不应该这样做。

让我们将此事归结为代码 sn-p 并对其进行注释。

//假设 $dbh 是 mysql 连接的数据库句柄

for ($userID = 1; $userID <= 1000; $userID++) {

        display_name ($dbh,"users",$userID)// outputs the name of the passed userid 
}

这里,display_name 函数应该按引用还是按值获取 $dbh?

【问题讨论】:

    标签: php performance pass-by-reference pass-by-value


    【解决方案1】:

    PHP 使用copy-on-write,这实质上意味着只要变量没有被修改,通过值传递它与通过引用传递它的效果相同。也就是说,在你描述的场景中使用引用不会有性能提升(其实some report引用会慢一些)

    【讨论】:

    • 在一百万年后,我原以为会是这样,即通过 byval 更快。很高兴我问了!
    • 大多数人没有意识到这一点,但 PHP 确实在努力优化它在幕后可以做的事情 :)
    【解决方案2】:

    它们主要是 $dbh(数据库句柄)和非常大的变量。到 说实话,只是 $dbh 的!真的。

    是什么让你觉得它很大? “句柄”通常表示类似指针(或指向指针的指针)之类的东西,非常小的东西。

    【讨论】:

    • 你误会了。我并不是说 $dbh 很大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 2013-03-27
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多