Я знаю, что в 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: объект – это не что иное, как куча свойств.
Начиная с 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
Я предлагаю вам использовать конструктор и установить нужные переменные при инициализации объекта.