@AlexandrMa

Почему, у наследника свойство пустое?

Почему, у наследника свойство ID пустое?

class App{

  protected $data = [];

  public function __construct()
  {
    //какие то действия базового класса
  }

  //сюда пробрасываем все нужные переменные для наследников
  public function setData(array $data)
  {
    $this->data = $data;
  }

}


class ModulOne extends App
{
  public $id;

  public function __construct()
  {
    if(!empty($this->data['id'])){
      $this->id = $this->data['id'];
    }
  }

}


$a = new ModulOne();
$a->setData(['id' => 1]);

var_dump($a);
  • Вопрос задан
  • 104 просмотра
Пригласить эксперта
Ответы на вопрос 3
@oxidmod
Потому что конструктор срабатывает раньше чем setData

И почему бы не передать $data прямо в конструктор?
Ответ написан
Конструктор класса вызывается единожды в момент его инициализации (new ...), следовательно никаких данных на этом этапе нет.

class App
{
    protected $data = [];

    public function setData(array $data)
    {
        $this->data = $data;
    }
}

class ModulOne extends App
{
    public $id;

    public function setData(array $data)
    {
        parent::setData($data);

        if (!empty($this->data['id'])) {
            $this->id = $this->data['id'];
        }
    }
}

$a = new ModulOne();
$a->setData(['id' => 1]);

var_dump($a);
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
LAPTOP.RU Кострома
от 25 000 до 65 000 ₽
LAPTOP.RU Москва
от 130 000 до 170 000 ₽
LAPTOP.RU Москва
от 150 000 до 190 000 ₽
04 мар. 2021, в 22:39
2500 руб./за проект
04 мар. 2021, в 22:15
10000 руб./за проект