Как уже отмечали другие, вы можете использовать stdClass. Однако я думаю, что это чище без (), вот так:
$obj = new stdClass;
Однако, исходя из этого вопроса, кажется, что вы действительно хотите иметь возможность добавлять свойства к объекту на лету. Вам не нужно использовать stdClass для этого, хотя вы можете. На самом деле вы можете использовать любой класс. Просто создайте экземпляр объекта любого класса и начните устанавливать свойства. Мне нравится создавать свой собственный класс, имя которого просто o, с некоторыми базовыми расширенными функциональными возможностями, которые мне нравится использовать в этих случаях, и которые отлично подходят для расширения из других классов. По сути, это мой собственный базовый класс объектов. Мне также нравится иметь функцию с именем o (). Вот так:
class o {
// some custom shared magic, constructor, properties, or methods here
}
function o() {
return new o;
}
Если вам не нравится иметь свой собственный базовый тип объекта, вы можете просто заставить o () вернуть новый stdClass. Одним из преимуществ является то, что o легче запомнить, чем stdClass, и он короче, независимо от того, используете ли вы его в качестве имени класса, имени функции или того и другого. Даже если у вас нет кода внутри вашего класса o, его все же легче запомнить, чем неуклюжий заглавный и названный stdClass (который может вызвать идею «класса болезней, передающихся половым путем»). Если вы настроите класс o, вы можете найти использование функции o () вместо синтаксиса конструктора. Это нормальная функция, которая возвращает значение, которое менее ограничено, чем конструктор. Например, имя функции может быть передано в виде строки функции, которая принимает вызываемый параметр. Функция также поддерживает связывание. Таким образом, вы можете сделать что-то вроде:
Это отличное начало для базового «языка» для создания других языковых уровней, когда верхний уровень записывается в полных внутренних DSL. Это похоже на стиль разработки LISP, и PHP поддерживает его лучше, чем большинство людей понимают. Я понимаю, что это немного касательно вопроса, но вопрос касается того, что я считаю основой для полного использования возможностей PHP.
$var = (object) (boolean) (string) (int) (array) new StdClass;
Вы знаете, просто чтобы быть в безопасности.