Il modo standard per creare un oggetto "vuoto" è:
$oVal = new stdClass();
Ma, con PHP> = 5.4, personalmente preferisco usare:
$oVal = (object)[];
È più breve e personalmente lo considero più chiaro perché stdClass potrebbe essere fuorviante per i programmatori alle prime armi (cioè "Ehi, voglio un oggetto, non una classe!" ...).
Lo stesso con PHP <5.4 è:
$oVal = (object) array();
(object)[]
è equivalente a new stdClass()
.
Vedi il manuale di PHP ( qui ):
stdClass : creato digitando sull'oggetto.
e ( qui ):
Se un oggetto viene convertito in un oggetto, non viene modificato. Se un valore di qualsiasi altro tipo viene convertito in un oggetto, viene creata una nuova istanza della classe integrata stdClass .
Tuttavia, ricorda che vuoto ($ oVal) restituisce falso , come diceva @PaulP:
Gli oggetti senza proprietà non sono più considerati vuoti.
Per quanto riguarda il tuo esempio, se scrivi:
$oVal = new stdClass();
$oVal->key1->var1 = "something"; // PHP creates a Warning here
$oVal->key1->var2 = "something else";
PHP crea il seguente avviso, creando implicitamente la proprietà key1
(un oggetto stesso)
Avvertenza: creazione di un oggetto predefinito da un valore vuoto
Questo potrebbe essere un problema se la tua configurazione (vedi livello di segnalazione errori ) mostra questo avviso al browser. Questo è un altro intero argomento, ma un approccio rapido e sporco potrebbe essere l'utilizzo dell'operatore di controllo degli errori (@) per ignorare l'avviso:
$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;
Sai, solo per essere al sicuro.