Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过引用将字符串传递给函数会加快速度吗?(菲律宾)_Php_Optimization_Function_Pass By Reference_Premature Optimization - Fatal编程技术网

Php 通过引用将字符串传递给函数会加快速度吗?(菲律宾)

Php 通过引用将字符串传递给函数会加快速度吗?(菲律宾),php,optimization,function,pass-by-reference,premature-optimization,Php,Optimization,Function,Pass By Reference,Premature Optimization,可能重复: 我想知道通过声明参数passby reference,PHP解释器是否会更快,因为它不必将字符串复制到函数的本地范围? 该脚本将XML文件转换为CSV,CSV有数千条记录,因此时间优化很少 请问: function escapeCSV( & $string ) { $string = str_replace( '"', '""', $string ); // escape every " with "" if( strpos( $string, ',' ) !==

可能重复:

我想知道通过声明参数passby reference,PHP解释器是否会更快,因为它不必将字符串复制到函数的本地范围? 该脚本将XML文件转换为CSV,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;
}

不要思考,个人资料

在Unix
time
命令下,运行使用每个版本函数的脚本100000次。不要对什么更快进行哲学思考;找出答案

[…]时间优化太少了

不,他们没有。

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

通过引用传递信息可能会产生误导。稍后您可能会遇到奇怪的问题,因为某些变量会神秘地改变。修改函数输入,这不是正常工作的方式。每次你以不寻常的方式做事,你都必须记住他们。但是你的记忆力和注意力是有限的。电脑不是。不要过分乐观

调试的难度是编写代码的两倍。因此,如果您尽可能巧妙地编写代码,那么根据定义,您还不够聪明,无法调试它--布莱恩·克尼汉

更新


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

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


此外,由于字符串没有被就地编辑,您已经有两种情况在函数中创建了新字符串(一种用于str_replace,另一种用于前后引号的串联)。对于传递值的情况,再增加一个不会成为应用程序的瓶颈。

。它们不会加快任何速度—事实上,它们的作用恰恰相反,因为它们需要在符号表中增加一个内部条目。

不能通过引用传递字符串。您只能通过引用传递变量。这里重复的是首选解决方案:Downvote不是我,我同意您应该编写可读代码。然而,如果你的网站运行太慢,你会失去访问者(客户?),因为他们不想等待你的页面加载。因此,执行性能非常重要!在这种情况下没有。您正在寻找微秒级的优化。是的,我后来发现了关于fputcsv的事。但不管怎样,我完全同意,对于大型项目,你之前写的是可以的。但这只是一个文件导入脚本,函数在脚本中声明,不会被任何其他程序员使用。当然,分析总是“正确”的答案,但思考从来都不是一个坏主意。了解哪些因素可以影响性能,哪些因素不能影响性能,以及代码中实际发生了什么,这将使您在第一时间就能够更好地进行编程。当然,为了强调一点,“不要思考”有点夸张。