Допустим, у меня есть базовый класс Animal
в отдельном коде плагина. Когда я использую этот плагин, я определяю дочерние классы, Cat
и Dog
, расширяет Animal
. У меня есть такие же конструкторы, поэтому я легко могу сделать как
$animal = new Animal($id);
$cat = new Cat($id);
$dog = new Dog($id);
Вопрос в том, когда у меня просто есть идентификатор (который представляет идентификатор объекта базы данных), и мне нужно создать экземпляр этого класса, что такое лучший способ определить тип дочернего класса без изменения кода базового класса.
Я думал о создании дочернего класса на основе экземпляра родительского класса, например
// plugin
class Animal{
function __construct($id){
if( $id instanceof Animal ){
$this = $id;
return;
}
// base class construct
}
}
// main code
class Cat extends Animal{
function __construct($id){
parent::__construct($id);
// child class construct
}
}
public function get_animal($id){
$animal = new Animal($id);
if( $animal->get_type() == 'Cat')
return new Cat($animal);
}
Это правильно? Спасибо