PHP:使用自定义函数编写更少的代码使用本机:会更快吗?

PHP:使用自定义函数编写更少的代码使用本机:会更快吗?,php,native-code,Php,Native Code,说我有我经常用的东西。例如,当我使用 explode ($delimiter, $string); 通常您会这样使用它: $string = "blah/blah/blah"; $e = explode("/", $string); 如果我编写自定义函数,PHP会更快吗 #reusable function c4($str) { return explode("/", $str); } $e = c4("blah/blah/blah/"); 或者当写为匿名函数时 #reusa

说我有我经常用的东西。例如,当我使用

explode ($delimiter, $string);
通常您会这样使用它:

$string = "blah/blah/blah";
$e = explode("/", $string);
如果我编写自定义函数,PHP会更快吗

#reusable 
function c4($str) {
    return explode("/", $str); 
} 
$e = c4("blah/blah/blah/");
或者当写为匿名函数时

#reusable
$c4 = function($str) {
    return explode("/", $str);
};
$e = $c4("blah/blah/blah");
我不知道该怎么说,但也许这是个正确的问题: PHP是否在解析时“缓存”用户函数以备将来使用?如果是这样的话,当使用相同的参数时,使用本机函数和重用相同的自定义函数的断点是什么。可能是因为可解析代码的数量较少

请阅读StackOverflow的建议:

"We prefer questions that can be answered, not just discussed."

所以我真的希望这不会在讨论中结束。非常好奇地等待你的答复

不,它会变慢,因为现在它也需要进行函数调用。

不,它永远不会变快,因为最终您将依赖相同的内置函数


事实上,每次调用都会花费更多的时间来预处理文件、更多的内存和更多的CPU时间,更不用说如果您将常用函数命名为c4,会造成混乱。

否。PHP执行包装版本的速度不会比直接调用内置函数快。它将始终是一个额外的函数调用。

不管“缓存”如何,现在必须执行两个函数。因此,它确实增加了一些东西。

我认为您应该自己看看,您将使用2个正常的系统资源

$string = "blah/blah/blah";
$max = 1000;

echo "<pre>";
$start = microtime(true);
for($i = 0; $i < $max; $i ++) {
    $e = explode("/", $string);
}
echo microtime(true) - $start, PHP_EOL;


$start = microtime(true);
function c4($str) {
    return explode("/", $str);
}
for($i = 0; $i < $max; $i ++) {
    $e = c4("/", $string);
}
echo microtime(true) - $start, PHP_EOL;


$start = microtime(true);
$c4 = function ($str) {
    return explode("/", $str);
};
for($i = 0; $i < $max; $i ++) {
    $c4($string);
}
echo microtime(true) - $start, PHP_EOL;

我知道这不完全是你要求的,但这里还有一些其他的事情需要考虑

它会让您和您的团队更快还是更慢地编写代码

当您需要在两年后返回并进行更改时,它会提高或降低代码的可读性吗。或者下一个程序员什么时候继承它

这有助于你坚持干燥原则吗

我会说在这个特定的例子中,最好使用explode或split。人们已经知道它的意思,因此代码是可读的。两年后,您将记不起c4是什么,尽管如果您将函数命名为类似于斜杠上的split_,可能会改进代码

考虑到你的函数本质上是在复制一行代码,我不认为它真的有助于保持干涸。实际上,您省去了键入/、的麻烦


但是,如果您有一小部分经常重复的两行或三行代码,这种方法可能会加快您的编码速度,减少出错的机会,并帮助您保持干爽。

为什么不将10000个explodes和10000个自定义函数放入一个测试PHP文件中,并测量所用的时间?在我看来,函数中的函数总是比较慢,特别是当explode是一个内置的函数编译器时。编译语言可能会内联函数调用以进行优化,PHP肯定不会这样做。但即使发生了这种情况,代码也会以同样的速度运行,而不是更快。天哪,几乎所有答案都出现在实例中。公平地说,你们都应该得到1^。谢谢你的洞察力。不完全忠实。取决于php版本see和@Alix AxelHaha,不。重新加载几次,您将看到lambda调用需要0.00075793266296387,而直接调用需要0.002370190948486。你不能以这种方式对这类东西进行基准测试,至少迭代次数很少,因为结果会完全不一致和不可靠。现在我也是。我自己可能也想到过这个测试。@Baba:这应该更一致,tho:。很好地向我指出了这一点。很明显,我不想叫它c4,但对于这个典型的例子,我同意。最后一段写得不错,我会记住的。
0.019805192947388
0.040219068527222
0.040642023086548