@fsgdoterr

Как передать массив в объект класса и распаковать его?

Мне нужно чтобы можно было сделать что то типа этого
$test = new Test(['id' => 5, 'name' => 'root']);

echo $test->id; // Выводит 5;
echo $test->name; // Выводит root;
  • Вопрос задан
  • 116 просмотров
Пригласить эксперта
Ответы на вопрос 3
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
<?php
class Test {
    public function __construct(array $input)
    {
        foreach ($input as $key => $val) {
            $this->{$key} = $val;
        }
    }
}

$test = new Test(['id' => 5, 'name' => 'root']);

var_dump($test->id);
var_dump($test->name);


Если задача просто сконвертировать массив в объект то можно так
$std = (object)['id' => 5, 'name' => 'root'];
var_dump($std);
var_dump($std->id);
var_dump($std->name);
/*
object(stdClass)#2 (2) {
  ["id"]=>
  int(5)
  ["name"]=>
  string(4) "root"
}
*/
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
Кастануть в объект не?
$array = ['id' => 5, 'name' => 'root'];
$object = (object) $array;

echo $object->id; // -> 5


Можно и с классом:
class Test {
    private $data = [];
    public function __construct($arr) {
        $this->data = $arr;
    }

    public function __get($name)
    {
        return $this->data[$name] ?? 'no data';
    }
}

$test = new Test(['id' => 5, 'name' => 'root']);
echo $test->name; // -> 'root'
echo $test->foo;  // -> 'no data'
Ответ написан
Комментировать
new Test(...array_values($array));
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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