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

いいえ、最終的には同じ組み込み関数に依存するため、高速になることはありません。

実際には、ファイルの前処理に少し時間がかかり、呼び出しごとにもう少しメモリとCPU時間がかかります。もちろん、共通の関数に名前を付けると混乱しますc4

于 2012-10-04T22:23:12.953 に答える
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. 2年後に戻って変更を加える必要がある場合、コードの可読性が向上または低下しますか?または、次のプログラマーがそれを継承するのはいつですか?

  3. それはあなたがDRYの原則に固執するのを助けますか?

この特定の例では、explodeまたはsplitを使用する方が良いと思います。人々はそれが何を意味するのかをすでに知っているので、コードは読みやすくなっています。今から2年後、c4が何であるかを思い出せなくなります(ただし、関数にそのような名前を付けた場合は、split_on_slashesおそらくコードが改善されます)。

あなたの関数が本質的に1行のコードを複製していることを考えると、私はそれが本当にDRYを維持するのに役立つとは思いません。基本的に、入力の手間を省くことができます"/",

ただし、頻繁に繰り返すコードの2行または3行のセクションが少しでもある場合、このアプローチはコーディングを高速化し、エラーの可能性を減らし、DRYを維持するのに役立つ可能性があります。

于 2012-10-04T22:28:24.870 に答える
1

いいえ。PHPは、組み込み関数を直接呼び出すよりも速くラップされたバージョンを実行しません。これは常に追加の関数呼び出しになります。

于 2012-10-04T22:23:35.237 に答える
1

'キャッシング'に関係なく、2つの関数を実行する必要があります。だからそれは間違いなく何かを追加します。

于 2012-10-04T22:24:28.383 に答える