Стандартный способ создания «пустого» объекта:
$oVal = new stdClass();
Но, с PHP> = 5.4, я лично предпочитаю использовать:
$oVal = (object)[];
Это короче, и я лично считаю это более понятным, потому что stdClass может ввести в заблуждение начинающих программистов (т. Е. "Эй, я хочу объект, а не класс!" ...).
То же самое с PHP <5.4: </p>
$oVal = (object) array();
(object)[]
эквивалентно new stdClass()
.
См. Руководство по PHP ( здесь ):
stdClass : Создается путем приведения типов к объекту.
и ( здесь ):
Если объект преобразован в объект, он не изменяется. Если значение любого другого типа преобразуется в объект, создается новый экземпляр встроенного класса stdClass .
Однако помните, что empty ($ oVal) возвращает false , как @PaulP сказал:
Объекты без свойств больше не считаются пустыми.
Что касается вашего примера, если вы напишите:
$oVal = new stdClass();
$oVal->key1->var1 = "something"; // PHP creates a Warning here
$oVal->key1->var2 = "something else";
PHP создает следующее предупреждение, неявно создавая свойство key1
(сам объект)
Предупреждение: создание объекта по умолчанию из пустого значения
Это может быть проблемой, если ваша конфигурация (см. уровень сообщений об ошибках ) отображает это предупреждение в браузере. Это еще одна тема, но быстрый и грязный подход может заключаться в использовании оператора контроля ошибок (@) , чтобы игнорировать предупреждение:
$oVal = new stdClass();
@$oVal->key1->var1 = "something"; // the warning is ignored thanks to @
$oVal->key1->var2 = "something else";