Определение типа ребенка в классе php - PullRequest
0 голосов
/ 03 февраля 2020

Допустим, у меня есть базовый класс 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);
}

Это правильно? Спасибо

...