说我有很多东西我用了很多东西。例如,大约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."
所以我真的希望这不会在讨论中结束。非常好奇地等待你的回复!
答案 0 :(得分:7)
不,它会慢一点,因为现在它也需要进行函数调用。
答案 1 :(得分:3)
不,它永远不会更快,因为最终你将依赖于相同的内置功能。</ p>
实际上,它会花费更多的时间来预处理文件,每次调用会占用更多的内存和更多的CPU时间,更不用说如果命名常用函数,你将会遇到的混乱{{1} }。
答案 2 :(得分: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
答案 3 :(得分:3)
我知道这并不是你提出的问题,但这里还有其他一些事情要考虑。
是否允许和您的团队更快或更慢地进行编码?
当您需要在两年后返回并进行更改时,它是否会改善或降低代码的可读性。或者当下一个程序员继承它时?
是否有助于您坚持DRY原则?
我会说在这个特定的例子中,你最好使用爆炸或拆分。人们已经知道这意味着什么,所以代码是可读的。两年后你将不记得c4是什么(尽管如果你将你的函数命名为split_on_slashes
,可能会改进你的代码)。
鉴于您的功能基本上是复制一行代码,我认为它并没有真正帮助保持DRY。基本上你可以省去键入"/",
但是,如果您经常重复使用两到三行代码,这种方法可能会加快编码速度,减少出错的几率,并帮助您保持干爽。
答案 4 :(得分:1)
没有。与直接调用内置函数相比,PHP不会更快地执行包装版本。它总是一个额外的函数调用。
答案 5 :(得分:1)
无论'缓存'现在必须执行两个函数。所以它肯定会增加一些东西。