気になったこと
以下のように引数の連想配列に不足しているキーを自動で補ってくれる関数がある。
f.php
functionf($option=[]){$option+=['text1'=>'1','text2'=>'2','separator'=>'/',];returnimplode($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など)の関数のように中身が複雑だと、さらに差が広がる。
- デフォルト値は省略したほうが実行速度は速いが、フレームワークのバージョンアップでデフォルト値が変わり、デグレが起きる可能性に留意する。