Подтвердить что ты не робот

Есть ли специальная инициализатор объекта в PHP, как сейчас, на С#?

Я знаю, что в С# вы теперь можете делать:

var a = new MyObject
{
    Property1 = 1,
    Property2 = 2
};

Есть ли что-то подобное в PHP тоже? Или просто я должен сделать это через конструктор или через несколько операторов,

$a = new MyObject(1, 2);

$a = new MyObject();
$a->property1 = 1;
$a->property2 = 2;

Если это возможно, но все думают, что это ужасная идея, я также хотел бы знать.

PS: объект представляет собой не что иное, как кучу свойств.

4b9b3361

Ответ 1

Начиная с PHP7, Анонимные классы, которые позволят вам расширить класс во время выполнения, включая установка дополнительных свойств:

$a = new class() extends MyObject {
    public $property1 = 1;
    public $property2 = 2;
};

echo $a->property1; // prints 1

До PHP7 такой вещи нет. Если идея состоит в том, чтобы создать объект с произвольными свойствами, вы можете сделать

public function __construct(array $properties)
{
    foreach ($properties as $property => $value) 
    {
        $this->$property = $value
    }
}

$foo = new Foo(array('prop1' => 1, 'prop2' => 2));

Добавьте варианты по своему усмотрению. Например, добавьте проверки на property_exists, чтобы разрешить установку определенных членов. Я нахожу бросание случайных свойств в объектах ошибками дизайна.

Если вам не нужен конкретный экземпляр класса, но вам просто нужен случайный мешок объекта, вы также можете сделать

$a = (object) [
    'property1' => 1,
    'property2' => 2
];

который затем предоставит вам экземпляр StdClass и который вы можете получить как

echo $a->property1; // prints 1

Ответ 2

Я предлагаю вам использовать конструктор и установить нужные переменные при инициализации объекта.