Se eu tenho uma stdObject
palavra a dizer $a
,.
Claro que não há nenhum problema para atribuir uma nova propriedade, $a
,
$a->new_property = $xyz;
Mas então eu quero removê-lo, por isso unset
não ajuda em nada aqui.
Assim,
$a->new_property = null;
é meio que isso. Mas existe uma maneira mais "elegante"?
Respostas:
Isso funciona para elementos de matriz, variáveis e atributos de objeto.
Exemplo:
fonte
$o=(object)array('a','b','c');
(Você tem que converter o objeto (de volta) para uma matriz até mesmo para simplesmente acessar essas propriedades!)object
, não umarray
. ;-)array
em umobject
? Isso simplesmente não faz sentido (mesmo que o PHP permita). Não vou encorage e espalharei maus hábitos de programação comentando isso :) Sem ofensas.unset($o->{0});
ou$k = 0; unset($o->$k);
.Isso também funciona especialmente se você estiver fazendo um loop sobre um objeto.
Atualizar
Versões mais recentes do PHP geram erros fatais,
Fatal error: Cannot use object of type Object as array
como mencionado por @CXJ. Nesse caso, você pode usar colchetesfonte
unset($object[$key])
funciona eunset($object->{$key})
não funciona (para ser mais precisounset($object['literal_key'])
eunset($object->{'literal_key'})
). PS Hm, eu posso estar errado, porém, em pensar a coisa que eu estou editando é um objeto, não um arrayIsso também funciona se você estiver fazendo um loop sobre um objeto.
Não há necessidade de usar colchetes.
fonte