Wenn ich stdObject
mitreden kann , $a
.
Sicher gibt es kein Problem, eine neue Eigenschaft zuzuweisen $a
.
$a->new_property = $xyz;
Aber dann möchte ich es entfernen, daher unset
hilft es hier nicht weiter.
So,
$a->new_property = null;
ist irgendwie davon. Aber gibt es einen eleganteren Weg?
Antworten:
Dies funktioniert für Array-Elemente, Variablen und Objektattribute.
Beispiel:
quelle
$o=(object)array('a','b','c');
(Sie müssen das Objekt (zurück) in ein Array konvertieren, um einfach auf solche Eigenschaften zugreifen zu können !)object
, nicht von einemarray
. ;-)array
in ein konvertierenobject
? Es macht einfach keinen Sinn (auch wenn PHP es erlaubt). Ich werde schlechte Programmiergewohnheiten nicht durch Kommentare dazu verbreiten :) Keine Beleidigung.unset($o->{0});
oder$k = 0; unset($o->$k);
.Dies funktioniert auch besonders, wenn Sie ein Objekt durchlaufen.
Aktualisieren
Neuere Versionen von PHP verursachen schwerwiegende Fehler,
Fatal error: Cannot use object of type Object as array
wie von @CXJ erwähnt. In diesem Fall können Sie stattdessen Klammern verwendenquelle
unset($object[$key])
funktioniert undunset($object->{$key})
funktioniert PHP 7.1 nicht (genauer gesagtunset($object['literal_key'])
undunset($object->{'literal_key'})
). PS Hm, ich kann mich jedoch irren, wenn ich denke, dass das, was ich bearbeite, ein Objekt ist, kein ArrayDies funktioniert auch, wenn Sie ein Objekt durchlaufen.
Klammern müssen nicht verwendet werden.
quelle