関数やメソッドを作った後、引数の順番を入れ替えたくなる時があります。これは特に次の様なデフォルト引数に関する場面で起こります。
<?php // なんとなく $border, $align と並べた function renderBox($x, $y, $w, $h, $border = 'solid', $align = 'L2R') { } // 実際は $align が色々な値で呼ばれていて、$border はデフォルト値ばかりで呼ばれている // 次の様に順番を変えたくなる function renderBox($x, $y, $w, $h, $border = 'solid', $align = 'L2R') { }
名前付き引数が使えない前提ではある引数の手前にある引数を何度も変更する場合、中間の引数を毎回セットする必要があります。これが繰り返されるとせっかくデフォルト値があるのに活かされず無駄に可読性と保守性を下げてしまいます。これを解消するならば引数の順番を入れ替えるのが効果的です。
PhpStormのリファクタリング機能を使うことで誤ることなく引数の順番を入れ替え、呼び出し側もそれにならった引数の渡し方にすることができます。これは次の様にできます。
- 関数またはメソッドの引数上でカーソルを置きます。
- Ctrl + Alt + Shift + T を押してコンテキストメニューを開き、リファクタリングを選びます
- メニューから”シグネチャーの/kbd変更を選択します。
- シグネチャーの変更のダイアログが表示されます。ここで引数の順序を変更することができます。それぞれの引数を選択し、上下の矢印ボタンを使用して引数の順序を変更します。
- 変更が完了したらリファクタリングボタンを押して変更を適用します。
これで好きなように安全に素早く引数の順番を変えられます。注意点として実行時に呼び出す関数が定まるようなパターンではリファクタリングが適用されないという点があります。例えば次の場合は引数の順番を変更してもらえません。
<?php function abc($a, $b, $c) { return $a . $b . $c; } // こういう普通の呼び出し方は問題なくリファクタリングされます echo abc('a', 'b', 'c') . PHP_EOL; // 文字列で呼ぶような実質動的な呼び出し方はリファクタリングされません echo 'abc'('a', 'b', 'c') . PHP_EOL; // もちろん変数に入れた関数名から呼ぶような方法もリファクタリングされません $abc = 'abc'; echo $abc('a', 'b', 'c') . PHP_EOL;
PhpStorm のリファクタリング機能は完璧ではありませんが人間の手でやるよりも高速で正確です。PhPStormは他にもリファクタリングを容易にするツールを提供しているので都度調べて活用するとプログラミングがだいぶ楽になります。