PhpStorm 2024.3 ヘルプ

メンバーをプルアップ、メンバーをプッシュダウンする

メンバーのプルアップリファクタリングでは、クラスメンバーを親クラスに移動できます。これは、クラス階層の最下部から機能を追加し始め、より一般的なケースでも使用できることに気づいたときに役立ちます(そうでなければ、コードの一部が親クラスで廃止される可能性がありますが、その子供の)。メンバーのプルアップリファクタリングでは、あるクラスのメソッドやフィールドを手動でコピーして別のクラスに貼り付け、内部参照をメンバーに修正する必要がなくなりました。

メンバーのプッシュダウンリファクタリングは、クラスメンバーをサブクラスに移動することによってクラス階層をクリーンアップできます。その後、メンバーは直接サブクラスにのみ再配置されます。

メンバーのプルアップ

  1. 親クラスに移動するクラスを選択します。

  2. メインメニューまたはコンテキストメニューからリファクタリング | メンバーのプルアップを呼び出します。「メンバーのプルアップ」ダイアログが表示されます。

  3. 宛先オブジェクト(親クラス)を選択します。

  4. メンバーセクションで、移動するメンバーを選択します。

  5. 選択したメンバーを宛先に移動するには、リファクタリングをクリックします。

サンプル

親クラス Vehicle を拡張するクラス Car があるとします。printPassengers() メソッドと $numOfPassengers フィールドを Car から Vehicle にプルしてみましょう。

  1. クラス Car 内にキャレットを配置し、コンテキストメニューからリファクタリング | メンバーのプルアップ ... を選択します。

  2. 開いたメンバーのプルアップダイアログで、printPassengers()$numOfPassengers の隣にあるチェックボックスを選択します。PhpStorm は、$numOfPassengers の可視性が非公開から保護に変更されることをお知らせします。

    ps_pull_members_dialog_php_example.png
  3. リファクタリングをクリックします。

リファクタリング後、クラスは次のようになります。

abstract class Vehicle { } class Car extends Vehicle { protected $weight; private $numOfPassengers; function __construct($weight,$numOfPassengers) { $this->weight = $weight; $this->numOfPassengers = $numOfPassengers; } protected function printWeight() { echo 'Weight = ' . $this->weight; } protected function printPassengers() { echo 'Number of passengers = ' . $this->numOfPassengers; } }
abstract class Vehicle { protected $numOfPassengers; protected function printPassengers() { echo 'Number of passengers = ' . $this->numOfPassengers; } } class Car extends Vehicle { protected $weight; function __construct($weight,$numOfPassengers) { $this->weight = $weight; $this->numOfPassengers = $numOfPassengers; } protected function printWeight() { echo 'Weight = ' . $this->weight; } }

メンバーのプッシュダウン

  1. エディターで、メンバーをプッシュダウンする必要があるクラスを開きます。

  2. メインメニューまたはコンテキストメニューから、リファクタリング | メンバーのプッシュダウンを選択します。メンバーのプッシュダウンダイアログは、プッシュダウンされるメンバーのリストを表示します。

  3. プルダウンするメンバー領域で、移動するメンバーを選択します。キャレットのメンバーはすでに選択されていることに注意してください。

    メンバーをプッシュすると問題が発生する可能性がある場合は、赤いハイライトで通知されます。状況が無人の場合、リファクタリング後にエラーが発生することを意味します。PhpStorm は問題を無視または修正することができる問題検出ダイアログを表示します。

  4. プレビューと変更の適用

サンプル

Vehicle クラス、Vehicle を拡張する Car クラス、Vehicle も拡張する Truck クラスがあるとします。start() メソッドを親クラス Vehicle からその子クラス Car および Truck にプッシュしましょう。

  1. キャレットを Car クラス内に配置し、コンテキストメニューからリファクタリング | メンバーのプッシュダウンを選択します。

  2. 開いたメンバーのプッシュダウンダイアログで、start() の横にあるチェックボックスを選択し、リファクタリングをクリックします。

    ps_pull_members_dialog_php_example.png

リファクタリング後、クラスは次のようになります。

abstract class Vehicle { protected $code; public $name; protected function start() { echo "Let's start!"; } } class Car extends Vehicle { protected $weight; function __construct($weight) { $this->weight = $weight; } } class Truck extends Vehicle { protected $length; function __construct($length) { $this->length = $length; } }
abstract class Vehicle { protected $code; public $name; } class Car extends Vehicle { protected $weight; function __construct($weight) { $this->weight = $weight; } protected function start() { echo "Let's start!"; } } class Truck extends Vehicle { protected $length; function __construct($length) { $this->length = $length; } protected function start() { echo "Let's start!"; } }