在Php中搜索关于抽象类使用的一些确认或指导

时间:2010-11-12 19:50:30

标签: php inheritance abstract-class abstraction

基本上我正在寻找有关我本周在工作中创建的内容的反馈或指导。问题是我有两种类型的文件上传。这些类型都有共享方法,如upload,isUploaded,move等。但是,在某些情况下,它们都具有独特的功能。

所以我认为处理这个的最好方法是创建一个包含公共功能的抽象类和2个扩展基本抽象类的独立类,以便继承常用功能。

所以我有:

abstract class Upload {

 protected $_id;
 protected $_name;
 protected $_dbTable;

 abstract public function create(Filter $filter) {}
 abstract public function update(Filter $filter) {}

 public function __construct($id){
  if(!is_null($id)){
   $class = new get_called_class();
   return new $class($id);
  }
 }

 protected function upload(){
  //Code implemented
 }

 protected function isUploaded(){
  //Code implemented
 }

 protected function move(){
  //Code implemented
 }

}

Class Book_Upload extends Upload {

 $dbTable = 'book';

 public function __construct($id){
  //Database stuff to obtain record information
  //Set protected member variables
  $results = $databaseCall();
  $this->_id = $results['id'];
  $this->_name = $results['name'];
 }

 public function create(Filter $filter) {
  //Code implemented
 }

 public function update(Filter $filter) {
  //Code implemenetd
 }

 //Other unique functions

}

Class Magazine_Upload extends Upload {

 $dbTable = 'magazine';

 Same as Booking_Upload but with additional functionality
 plus abstract methods

}

我的查询是,我正确使用抽象方法吗?我是否遵循了正确的道路。另外,我不确定我是否需要抽象类中的构造。如果有人试图调用$ upload = new Upload($ id)?

,该怎么办?

2 个答案:

答案 0 :(得分:0)

你扩展类不会调用parent :: __ construct()所以抽象__construct不会有任何区别。

您正在使用抽象类;它们是基类,它们由其他具有共同功能和/或具有相同功能但以不同方式实现的类构建。

抽象类是构建的基础,为其他类提供通用功能和结构。

答案 1 :(得分:0)

任何类都应提供单一类型的功能(单一责任原则,例如:Single Responsibility Principle - A hard to see example?)。

上传类只能处理上传。如果没有更多的代码,我会从你的文字中嗅到一个过度功能的类,它试图完成上传和文档特定的任务。

所以在这之前,你应该很好地定义这些类将要做什么。这些特定文档的功能是否真的与实际的上传行为有关?