Я пишу php-приложение с подклассами, и, поскольку я хочу иметь несколько способов создания объекта, я использую различные фабричные методы вместо нескольких конструкторов.
У меня есть User
с заводскими методами
User::from_id
User::from_netid
У меня есть несколько подклассов User
. Ранее я вызывал родительский суперконструктор, но когда я переключился на фабричный метод, этот конструктор не существовал.
У меня есть Student
, подкласс User
. Чтобы заставить его работать, мне пришлось продублировать почти весь код фабрики суперклассов с User::from_id
до load_by_id
, поскольку в этой ситуации экземпляр уже существовал:
// In Student.php - Student extends User
public static function from_id_and_course($id, $course){
$instance = new self();
$instance->load_by_id($id);
$instance->course = $course;
...
}
Я хочу вызвать метод фабрики суперкласса из подкласса в качестве отправной точки, а затем продолжить добавление других полей. Как то так ...
$instance = User::from_id($id);
или
$instance = Student::from_id($id);
но в этих случаях он дает мне User
объект, и мне нужен Student
объект. Единственный способ, которым я мог бы достичь этого, это сделать $instance = new self()
.
Как я могу вызвать метод фабрики суперкласса из подкласса в качестве отправной точки для создания нового метода фабрики подкласса?