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