0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

連想配列のデフォルト値を省略すると実行速度は速くなる

Posted at

#気になったこと

以下のように引数の連想配列に不足しているキーを自動で補ってくれる関数がある。

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など)の関数のように中身が複雑だと、さらに差が広がる。
  • デフォルト値は省略したほうが実行速度は速いが、フレームワークのバージョンアップでデフォルト値が変わり、デグレが起きる可能性に留意する。
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?