为了账号安全,请及时绑定邮箱和手机立即绑定

PHP父类方法继承问题

PHP父类方法继承问题

PHP
_NULL_NULL 2015-08-17 00:19:37
有几个类的很相似,只是其方法对数据处理的逻辑和最后数据输出的结果有些差别,可以通过这样的思路实现吗?1.思路一,通过修改抽象函数逻辑实现返回值不同abstract class parents{     protected $data = array();     public function get_content(         $this->data = sql_get_content();         return data_function($this->data);     );     protected sql_get_content(){     //DB功能     }     abstract protected function data_function(); }class child extends parents{      abstract protected function data_function($data){     //不同类对$data的处理逻辑不一样,使得get_content()返回的结果不一样     }; }2.思路二,继承父类的函数,不同子类在后面加不同的逻辑处理,最后返回不同结果。很想知道这个方法能不能行得通abstract class parents{     protected $data = array();     public $result;     public function get_content(         $this->data = sql_get_content();     );     protected sql_get_content(){     //DB功能     } }class child extends parents{      public function get_content(         parent::get_content();         //不同类对$data的处理逻辑不一样,使得get_content()返回的结果不一样         return $this->result;     ); }
查看完整描述

1 回答

已采纳
?
思君满月

TA贡献82条经验 获得超36个赞

通过继承和复写是实现多态的一个手段:其实你这两种思路,本质上都是一样的。

你的思路一对外只提供了一个接口,get_content,因为data_function()是保护的,所以你没打算让外界访问这个方法,只是用于类内部使用。子类通过复写这个方法既可以实现不同的处理逻辑。

也许你会发现data_function其实只能在类内部访问,而且只被get_content访问,所以不如直接把它实现到get_function中,这时候子类必须复写get_content方法,并且增加处理逻辑。

个人感觉思路一会好点,原因有2:

  1. 思路一把处理逻辑抽象出来,一旦将来需求变化,处理逻辑需要在其他地方使用,思路1会很方便。

  2. 我们通常是复写抽象方法,或实现接口方法,而不是复写一个已经实现的方法。

其实思路一还可以进一步优化:

因为我们的类只要是提供内容,数据的处理逻辑更像是一种工具,所以不如把处理逻辑抽象成一个接口,想这样:

// 抽象工具
interface DataTool{
   public function date_function($data);
}
// 具体工具
class DataTool1 implements DataTool{
   public function data_function($data){
       //处理逻辑
       return $data;
   }
}
// 内容提供者
class Parent{
   private DataTool $dataTool;
   public Parent(DataTool $dataTool){
       $this->dataTool = $dataTool;
   }
   protected get_sql_content(){
      // sql_content
   }
   public get_content(){
      $sql_content = $this->get_sql_content();
      $data        = $this->dataTool->data_function($sql_content);
      return $data;
   }
}

好处你可以自己思考,写太多了。

查看完整回答
反对 回复 2015-08-17
  • 1 回答
  • 0 关注
  • 1344 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信