Ответ 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