Standardowym sposobem utworzenia „pustego” obiektu jest:
$oVal = new stdClass();
Ale przy PHP> = 5.4 osobiście wolę używać:
$oVal = (object)[];
Jest krótszy i osobiście uważam, że jest bardziej przejrzysty, ponieważ stdClass może wprowadzać w błąd początkujących programistów (tj. „Hej, chcę obiekt, a nie klasę!” ...).
To samo z PHP <5.4 to:
$oVal = (object) array();
(object)[]
jest równoważne z new stdClass()
.
Zobacz instrukcję PHP ( tutaj ):
stdClass : Utworzony przez rzut rzutowy na obiekt.
i ( tutaj ):
Jeśli obiekt zostanie przekonwertowany na obiekt, nie zostanie zmodyfikowany. Jeśli wartość dowolnego innego typu zostanie przekonwertowana na obiekt, zostanie utworzone nowe wystąpienie wbudowanej klasy stdClass .
Pamiętaj jednak, że puste ($ oVal) zwraca false , ponieważ @PaulP powiedział:
Obiekty bez właściwości nie są już uważane za puste.
Jeśli chodzi o twój przykład, jeśli piszesz:
$oVal = new stdClass();
$oVal->key1->var1 = "something"; // PHP creates a Warning here
$oVal->key1->var2 = "something else";
PHP tworzy następujące Ostrzeżenie, domyślnie tworząc właściwość key1
(sam obiekt)
Ostrzeżenie: tworzenie domyślnego obiektu z pustej wartości
Może to stanowić problem, jeśli Twoja konfiguracja (patrz poziom zgłaszania błędów ) wyświetla to ostrzeżenie w przeglądarce. To kolejny cały temat, ale szybkim i nieprzyzwoitym podejściem może być użycie operatora kontroli błędów (@) w celu zignorowania ostrzeżenia:
$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;
Wiesz, żeby być bezpiecznym.