По сути, я ищу отзывы или рекомендации по поводу чего-то, что я создал на этой неделе на работе. Проблема заключалась в том, что у меня было два типа загрузки документов. Оба этих типа имеют общие методы, такие как загрузка, isUploaded, перемещение и т. д. Но в некоторых случаях они оба имели уникальную функциональность.
Поэтому я подумал, что лучшим подходом к решению этой проблемы будет создание абстрактного класса, который содержит общую функциональность и 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)?