能否在PhpStorm中自动重构子类以合并父类,简化继承链?
PhpStorm能否自动完成父类合并的重构操作?
我需要在PhpStorm中实现类的自动「合并」操作:移除grandparent->parent->child继承链中的父类(比如示例里的B类),让子类C直接继承祖父类A,同时将B类的方法迁移到C中,并把C里的parent::调用替换为B类中的实际逻辑。
初始代码
// the grandparent class class A { // ... } // my parent class class B extends A { public function foo() { // ... } public function getAge(string $name): int { return 10; } } // my child class class C extends B { public function getAge(string $name): int { if ($name === 'Bob') { return 99; } return parent::getAge($name); } public function bar() { // ... } }
期望结果
// the grandparent class remains unchanged class A { // ... } // the parent B class is eliminated // child class extends the "grandparent" now class C extends A { // method pushed down from parent to child public function foo() { // ... } // method kept as-is in child public function bar() { // ... } // merge of child and parent methods public function getAge(string $name): int { // logic as-is from child if ($name === 'Bob') { return 99; } // parent::getAge() replaced with actual logic from parent return 10; } }
实现方式
PhpStorm原生没有一键完成该合并的重构功能,但可以通过组合多个原生操作实现:
- 将父类B的方法下推到子类C:选中B类,右键选择
Refactor->Push Members Down,在弹窗中勾选要下推的方法(如foo()和getAge()),执行后C会生成这些方法的副本,B类中的对应方法被移除。 - 替换
parent::调用为实际逻辑:选中C类getAge()方法里的parent::getAge($name),按Ctrl+Alt+N(Windows/Linux)或Cmd+Opt+N(Mac)触发Inline重构,选择将调用替换为B类中的实际代码。 - 修改C的继承关系:手动将
class C extends B改为class C extends A。 - 删除B类:确认B类无其他引用后,直接删除即可。
目前没有专门的PhpStorm插件能一键完成整个流程,上述组合操作是当前最接近需求的方案。
内容的提问来源于stack exchange,提问作者Colin
相关产品推荐
相关产品推荐

