La forma estándar de crear un objeto "vacío" es:
$oVal = new stdClass();
Pero, con PHP> = 5.4, personalmente prefiero usar:
$oVal = (object)[];
Es más corto y personalmente lo considero más claro porque stdClass podría ser engañoso para los programadores novatos (es decir, "¡Hola, quiero un objeto, no una clase!" ...).
Lo mismo con PHP <5.4 es:
$oVal = (object) array();
(object)[]
es equivalente a new stdClass()
.
Vea el manual de PHP ( aquí ):
stdClass : creado mediante la conversión de tipos a objetos.
y ( aquí ):
Si un objeto se convierte en un objeto, no se modifica. Si un valor de cualquier otro tipo se convierte en un objeto, se crea una nueva instancia de la clase incorporada stdClass .
Sin embargo, recuerde que vacío ($ oVal) devuelve falso , como @PaulP dijo:
Los objetos sin propiedades ya no se consideran vacíos.
Con respecto a su ejemplo, si escribe:
$oVal = new stdClass();
$oVal->key1->var1 = "something"; // PHP creates a Warning here
$oVal->key1->var2 = "something else";
PHP crea la siguiente Advertencia, creando implícitamente la propiedad key1
(un objeto en sí mismo)
Advertencia: crear un objeto predeterminado a partir de un valor vacío
Esto podría ser un problema si su configuración (consulte el nivel de informe de errores ) muestra esta advertencia al navegador. Este es otro tema completo, pero un enfoque rápido y sucio podría estar utilizando el operador de control de errores (@) para ignorar la advertencia:
$oVal = new stdClass();
@$oVal->key1->var1 = "something"; // the warning is ignored thanks to @
$oVal->key1->var2 = "something else";
$var = (object) (boolean) (string) (int) (array) new StdClass;
Ya sabes, solo para estar a salvo.