2

可能重复:
在 PHP (>= 5.0) 中,通过引用传递是否更快?

我想知道如果通过引用传递参数声明,PHP 解释器是否会更快,因为不必将字符串复制到函数的本地范围?该脚本将 XML 文件转换为具有数千条记录的 CSV,因此优化时间很少。

这会:


function escapeCSV( & $string )
{
    $string = str_replace( '"', '""', $string ); // escape every " with ""
    if( strpos( $string, ',' ) !== false )
        $string = '"'.$string.'"'; // if a field has a comma, enclose it with dobule quotes
    return $string;
}

比这更快:


function escapeCSV( $string )
{
    $string = str_replace( '"', '""', $string ); // escape every " with ""
    if( strpos( $string, ',' ) !== false )
        $string = '"'.$string.'"'; // if a field has a comma, enclose it with dobule quotes
    return $string;
}

?

4

4 回答 4

8

别想了,简介

运行脚本,使用每个版本的函数重复 100,000 次,例如在 Unixtime命令下。不要思考什么是更快的;查出。

于 2009-07-23T15:34:52.983 回答
1

我的猜测是,这是一个几乎不引人注目的优化,可能会导致意想不到的副作用。例如,下一个人可能不会期望escapeCSV修改他的参数,并且他可能会使用他传入的参数,认为它仍然是非 CSV 字符串。

此外,由于字符串不是就地编辑的,因此您已经遇到了两种情况,即在您的函数中创建了一个新字符串(一种用于 str_replace,一种用于在它之前/之后连接引号)。值传递案例的另一种情况不会成为您应用程序的瓶颈。

于 2009-07-23T15:39:08.073 回答
1

PHP 引用不是指针。它们不会加速任何事情——事实上它们恰恰相反,因为它们需要符号表中的额外内部条目。

于 2009-07-23T16:31:48.170 回答
0

[...] 时间优化太少了。

不,他们没有。

唯一真正的优化是帮助您更快地阅读和/或编写代码的优化。您不应该为了性能而牺牲简单性或可读性 - 从长远来看,它会减慢您的速度。

通过引用传递事物可能特别具有误导性。稍后您可能会遇到奇怪的问题,因为某些 var 会发生神秘的变化。您修改函数输入,这不是正常工作的方式。每次您以不同寻常的方式做事时,您都必须记住它们。你的记忆力和注意力是有限的。电脑的不行。不要过度优化。

首先,调试的难度是编写代码的两倍。因此,如果您尽可能巧妙地编写代码,那么根据定义,您还不够聪明,无法对其进行调试。——布赖恩·W·克尼汉

更新

在这种情况下,您的整个功能escapeCSV有点毫无意义。您应该使用fputcsv,这是用 C 编写的核心 PHP 库,因此速度更快且内存效率更高。

于 2009-07-23T15:35:55.977 回答