IntelliJ IDEA 2020.1ヘルプ

PHPコードのリファクタリング

リファクタリング(英語)は、アプリケーションの動作を変更せずにソースコードの構造を更新することを意味します。リファクタリングはコードを堅牢にし、dry(英語)を維持しやすくします。

シグネチャーの変更

  1. エディターで、シグネチャーを変更するメソッドの名前の中にカーソルを置きます。

  2. Ctrl+F6を押します。または、メインメニューまたはコンテキストメニューでリファクタリング | シグネチャーの変更を選択します。

  3. シグネチャーの変更ダイアログで、メソッドのシグネチャーに必要な変更を加え、必要なその他の関連する変更を指定します。

    • 例:メソッド名を変更します。これを行うには、名前フィールドのテキストを編集します。戻りの型フィールドの内容を編集して、戻りタイプを変更できます。メソッドの戻り値の型の設定は、PHP言語バージョン7.1以降でのみ可能です。設定/環境設定ダイアログ Ctrl+Alt+SPHPページ でPHP言語レベルを指定できます。

    • パラメーター領域のテーブルとボタンを使用してメソッドパラメータを管理します。パラメータを追加するときは、これらのパラメータを現在のメソッドを呼び出すメソッドに伝播することができます。

    • PHPコンテキストでは、シグネチャーの変更リファクタリングがクラスのコンストラクターから呼び出されると、新しいパラメーターをクラスプロパティとして初期化できます。これを行うには、クラスプロパティの作成と初期化チェックボックスを使用します。

      このチェックボックスを選択すると、新しく追加されたパラメータはフィールドとして初期化されます。IntelliJ IDEAは、このパラメータと同じ名前のフィールドを作成し、次のように割り当てられた行を追加します。

      $this->parameterName = $parameterName;
      チェックボックスをオフにすると、初期化せずにパラメータが追加されます。

      この例では、__construct() メソッドでシグネチャーの変更リファクタリングを呼び出し、新しい $q パラメーターを追加します。結果は、クラスプロパティの作成と初期化 チェックボックスが選択されているかどうかによって異なります。新しいフィールドは、デフォルトの可視性修飾子で作成されます。これは、設定/環境設定ダイアログ Ctrl+Alt+Sコード・スタイル: PHPページのコード生成タブで設定されます。

      class ChangeSignatureNewParam { function __construct() { $a = "Constructor in ChangeSignatureNewParam"; print $a; } }

      クラスプロパティの作成と初期化チェックボックスが選択されています:

      class ChangeSignatureNewParam { private $q; function __construct($q) { $a = "Constructor in ChangeSignatureNewParam"; print $a; $this->q = $q; } }

      クラスプロパティの作成と初期化チェックボックスがオフになります。

      class ChangeSignatureNewParam { function __construct($q) { $a = "Constructor in ChangeSignatureNewParam"; print $a; } }
    • 追加されたパラメータを削除または並べ替えることができます。パラメータの名前またはデフォルト値を変更するには、パラメータテーブル(それぞれ名前およびデフォルト値フィールド)で必要な更新を行います。

    • 新しいメソッドパラメータ(存在する場合)を、現在のメソッドを呼び出すメソッドの階層に沿って伝播できます。パラメーターの伝播ボタン propagateParametersをクリックします。

  4. すぐにリファクタリングを実行するには、リファクタリングをクリックします。予想される変更を確認し、実際にリファクタリングを実行する前に必要な調整を行うには、プレビューをクリックします。

サンプル

次の表は、同じシグネチャーの変更リファクタリングを実行する3つの異なる方法を示しています。

いずれの場合も、result() 関数の名前が generateResult() に変更され、新しい $b パラメータがこの関数に追加されます。

これらの例は、リファクタリング設定に応じて、関数呼び出し、呼び出し元の関数 showResult()、およびその他のコードフラグメントがどのように影響を受ける可能性があるかを示しています。

// This is the function whose signature will be changed: function result($a) { // some code here } function showResult($a) { // Here is the function call: $this->result($a); } // Now we'll rename the function and // add one parameter.
// The function has been renamed to generateResult. // The new parameter $b has been added. function generateResult($a,$b) { // some code here } function showResult($a,$b) { // The function call has been changed accordingly: $this->generateResult($a,$b); }
// This is the function whose signature will be changed: function result($a) { // some code here } function showResult($a) { // Here is the function call: $this->result($a); } // Now we'll rename the function and add one parameter. //We will also specify the default value 'new_param' //for this new parameter
// The function has been renamed to generateResult. // The new parameter $b has been added. function generateResult($a,$b) { // some code here } function showResult($a) { // The function call has been changed accordingly: $this->generateResult($a,'new_param'); } // When performing the refactoring, 'new_param' was specified as // the default parameter value.
// This is the function whose signature will be changed: function result($a) { // some code here } function showResult($a) { // Here is the function call: $this->result($a); } // Now we'll rename the function and add one parameter. //We will also propagate this new parameter //through the showResult() calling function to the function call.
// The function has been renamed to generateResult. // The new parameter $b has been added. function generateResult($a,$b) { // some code here } // Note the new function parameter: function showResult($a,$b) { // The function call has been changed accordingly: $this->generateResult($a,$b); }
最終更新日: 2020年7月7日