Jeśli mam stdObject
do powiedzenia, $a
.
Na pewno nie ma problemu z przypisaniem nowej właściwości $a
,
$a->new_property = $xyz;
Ale potem chcę go usunąć, więc unset
nie ma tu żadnej pomocy.
Więc,
$a->new_property = null;
jest tego rodzaju. Ale czy istnieje bardziej „elegancki” sposób?
Odpowiedzi:
Działa to w przypadku elementów tablicy, zmiennych i atrybutów obiektu.
Przykład:
źródło
$o=(object)array('a','b','c');
(Musisz przekonwertować obiekt (z powrotem) na tablicę, aby uzyskać dostęp do takich właściwości!)object
, a nie anarray
. ;-)array
w wobject
? To po prostu nie ma sensu (nawet jeśli PHP na to pozwala). Komentując to, nie będę wychwytywał i rozpowszechniał złych nawyków programistycznych :) Bez obrazy.unset($o->{0});
lub$k = 0; unset($o->$k);
.Działa to również szczególnie, jeśli zapętlasz obiekt.
Aktualizacja
Nowsze wersje PHP
Fatal error: Cannot use object of type Object as array
generują błąd krytyczny, o którym wspomniał @CXJ. W takim przypadku możesz użyć nawiasówźródło
unset($object[$key])
działa iunset($object->{$key})
nie działa (a dokładniej,unset($object['literal_key'])
iunset($object->{'literal_key'})
). PS Hm, jednak mogę się mylić, myśląc, że to, coDziała to również, jeśli zapętlasz obiekt.
Nie trzeba używać nawiasów.
źródło