#気になったこと
以下のように引数の連想配列に不足しているキーを自動で補ってくれる関数がある。
f.php
function f($option = []) {
$option += [
'text1' => '1',
'text2' => '2',
'separator' => '/',
];
return implode($option['separator'], [$option['text1'], $option['text2']]);
}
関数の呼び出し時に(a)オプション配列にすべてのキーを指定する場合、(b)デフォルト値を省略した場合、どちらの実行速度が速いか?
#時間計測スクリプト
benchmark.php
$t1 = microtime(true);
for($i=0;$i<500000;$i++) {
f([
'text1' => 'abc',
'text2' => 'def',
'separator' => '/',
]);
}
$t2 = microtime(true);
$t3 = microtime(true);
for($i=0;$i<500000;$i++) {
f([
'text1' => 'abc',
'text2' => 'def',
]);
}
$t4 = microtime(true);
echo ($t2-$t1) . "\n";
echo ($t4-$t3) . "\n";
exit;
結果
条件 | 実行時間avg (sec) |
---|---|
(a)オプション配列にすべてのキーを指定する場合 | 0.12881302833557 |
(b)デフォルト値を省略した場合 | 0.12693285942078 |
- デフォルト値を省略したほうが実行速度は(若干)速い。
- フレームワーク(CakePHP, Laravelなど)の関数のように中身が複雑だと、さらに差が広がる。
- デフォルト値は省略したほうが実行速度は速いが、フレームワークのバージョンアップでデフォルト値が変わり、デグレが起きる可能性に留意する。