0

说我有一些我经常使用的东西。例如,当我使用大约 90% 的时间

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."

所以我真的希望这不会以讨论结束。非常好奇地等待您的回复!

4

6 回答 6

7

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

于 2012-10-04T22:23:03.950 回答
3

我认为你应该自己看看,你会使用x2正常的系统资源

$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;

输出

0.019805192947388
0.040219068527222
0.040642023086548
于 2012-10-04T22:25:51.807 回答
3

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

  1. 它会让您和您的团队更快或更慢地编写代码吗?

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

  3. 它有助于您坚持 DRY 原则吗?

我会说在这种特定情况下,您最好使用爆炸或拆分。人们已经知道它的含义,因此代码是可读的。两年后,您将不会记得 c4 是什么(尽管如果您将函数命名为类似split_on_slashes的名称可能会改进您的代码)。

鉴于您的函数本质上是复制一行代码,我不认为它真的有助于保持 DRY。基本上你省去了打字的麻烦"/",

但是,如果您经常重复的只是一小段两三行代码,那么这种方法可能会加快您的编码速度,减少出错的机会,并帮助您保持 DRY。

于 2012-10-04T22:28:24.870 回答
3

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

实际上,每次调用都会消耗更多的时间来预处理文件、更多的内存和更多的 CPU 时间,更不用说命名常用函数时会产生的混乱c4

于 2012-10-04T22:23:12.953 回答
1

不,PHP 不会比直接调用内置函数更快地执行您的包装版本。它总是一个额外的函数调用。

于 2012-10-04T22:23:35.237 回答
1

不管“缓存”现在必须执行两个功能。所以它肯定会增加一些东西。

于 2012-10-04T22:24:28.383 回答