Согласно Руководству по PHP :
Если объект преобразуется в объект, он не изменяется. Если значение любого другого типа преобразуется в объект, создается новый экземпляр встроенного класса stdClass. Если значение было NULL, новый экземпляр будет пустым. Массив преобразуется в объект со свойствами, названными ключами и соответствующими значениями. Обратите внимание, что в этом случае до PHP 7.2.0 числовые ключи были недоступны до тех пор, пока они не будут повторены.
Когда вы приводите строку к объекту, значение этой строки будет сохранено как атрибут. Дается имя по умолчанию, которое scalar
. Даже пустая строка все еще считается имеющей значение.
В PHP у вас есть несколько способов создания пустого объекта.
Пример взят из https://www.php.net/manual/en/language.types.object.php#118679
<?php
$obj1 = new \stdClass; // Instantiate stdClass object
$obj2 = new class{}; // Instantiate anonymous class
$obj3 = (object)[]; // Cast empty array to object
var_dump($obj1); // object(stdClass)#1 (0) {}
var_dump($obj2); // object(class@anonymous)#2 (0) {}
var_dump($obj3); // object(stdClass)#3 (0) {}
Другим способом было бы привести нулевое значение к объекту, как показано в N69S:
$object = (object)null; // Same as (object)[]
И, конечно, вы можете преобразовать ассоциативный массив в объект:
$object = (object)['a' => 123];
// object(stdClass)#1 (1) {
// ["a"]=>
// int(123)
// }