@AlexandrMa

Как инициализировать свойства у наследника?

class A
{
  protected $user_id;
  
  public setUser($id){
    $this->user_id = $id;
  }
  
}


class B extends A{

  private $name;
  private $price;

  public function init(array $data){
    if(isset($data['price'])){
      $this->price = $data['price'];
    }
    //.....
  }
  
}

Контроллер вызывает только наследника (один класс и один экшн). В данном примере это класс B.
У каждого наследника, есть свои свойства. При этом у всех есть user_id, которое я и вынес в родителя. У родителя есть ещё несколько методов, которые также должны быть доступны в любом наследнике, поэтому они тоже в классе A. (их не стал добавлять в пример)

Вопрос. Как правильно инициализировать свойства Наследников, если я не знаю, какие свойства у них будут в будущем?
Иными словами переписывать класс A потом нельзя. А контроллер может только один раз вызвать action.

Я решил это вот так
$obj = new B;
$obj->setUser(1);
if(!empty($_POST)){
  $obj->init($_POST);
}
$obj->method();


Правильно ли я реализовал добавление данных в наследника или есть более простые решения?
  • Вопрос задан
  • 51 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы