Intereting Posts

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

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

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

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

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

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

PS: объект – это не что иное, как куча свойств.

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

Начиная с 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 

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