如何从 OOP 符号中的扩展控制器继承函数



我想知道这在 php 的面向对象编程中是否可行。我有一个控制器

class BaseController extends Controller{
   /**
   * @Route("/sample", name="sample")
   */
   public function postSampleAction(Request $request){
   }
}

我有一个名为ProductEvent和PriceEvent

class ProductEvent extends BaseController{
   public function checkEvent(){
      echo "product event";
   }
}
class PriceEvent extends BaseController{
       public function checkEvent(){
          echo "price event";
       }
    }

如您所见,我扩展了基本控制器。我想发生的是我需要将checkEvent()放到基本控制器中postSampleActioin()

class BaseController extends Controller{
       /**
       * @Route("/sample", name="sample")
       */
       public function postSampleAction(Request $request){
         $this->checkEvent();
       }
    }

我不知道这是否是一种正确的方法。我想测试这是否会回显checkEvent()函数。

对不起,我的错。我忘了添加我使用的框架。我为此使用了symfony。

这意味着

你想BaseController成为一个不完整的抽象类,需要继承并在那里实现checkEvent方法:

abstract class BaseController extends Controller {
   public function postSampleAction(Request $request) {
       $this->checkEvent();
   }
   abstract public function checkEvent();
}

你现在不能单独实例化BaseController,任何继承的非抽象类都需要实现checkEvent;这给了你所需的类型安全性,允许你在postSampleAction中依赖checkEvent

最新更新