@phpcoder81

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

Устал работать с массивом. Хочу заменить метод
public function setData(array $data):void{
  $this->data = $data;
}

на
public function setData(array $data):void{
  foreach($data as $k => $v){
    $this->$k = $v;
  }
}

1. Делают ли так?
2. Как это сделать?) Пробовал через __set, что-то не разобрался. Первый раз столкнулся с такой необходимостью.
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
1. Делают ли так?
Делают, но это не хорошая практика. Во первых имеете шанс затереть какие-то настроечные данные объекта и получить непредсказуемость поведения. Во вторых, если у вас там значения из бд или другого хранилища в формате ключ-значение, лучше хранить их в отдельном поле, том же дата, но в виде stdClass, чтобы не путать их при работе с хранилищем с остальными полями, например так:
public function setData(array $data):void{
  $this->data = (object)$data;
}

в идеале у вас должен быть DTO (data transfer object), но в актив рекорд движках он обычно не используется.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы