La manière standard de créer un objet "vide" est:
$oVal = new stdClass();
Mais, avec PHP> = 5.4, je préfère personnellement utiliser:
$oVal = (object)[];
Il est plus court et je le considère personnellement plus clair car stdClass pourrait être trompeur pour les programmeurs débutants (c'est-à-dire "Hé, je veux un objet, pas une classe!" ...).
La même chose avec PHP <5.4 est:
$oVal = (object) array();
(object)[]
est équivalent à new stdClass()
.
Voir le manuel PHP ( ici ):
stdClass : créé par transtypage en objet.
et ( ici ):
Si un objet est converti en objet, il n'est pas modifié. Si une valeur de tout autre type est convertie en objet, une nouvelle instance de la classe intégrée stdClass est créée .
Cependant, rappelez-vous que vide ($ oVal) retourne faux , comme @PaulP l'a dit:
Les objets sans propriétés ne sont plus considérés comme vides.
Concernant votre exemple, si vous écrivez:
$oVal = new stdClass();
$oVal->key1->var1 = "something"; // PHP creates a Warning here
$oVal->key1->var2 = "something else";
PHP crée l'avertissement suivant, créant implicitement la propriété key1
(un objet lui-même)
Avertissement: création d'un objet par défaut à partir d'une valeur vide
Cela pourrait être un problème si votre configuration (voir niveau de rapport d'erreurs ) affiche cet avertissement au navigateur. C'est un autre sujet entier, mais une approche rapide et sale pourrait être d'utiliser l' opérateur de contrôle d'erreur (@) pour ignorer l'avertissement:
$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;
Vous savez, juste pour être en sécurité.