Ist es möglich, die Eigenschaft eines Objekts in PHP zu löschen?
Lesezeit: 3 Minuten
valk
Wenn ich eine habe stdObject sagen, $a.
Sicher, es ist kein Problem, eine neue Eigenschaft zuzuweisen, $a,
$a->new_property = $xyz;
Aber dann möchte ich es entfernen, so unset hilft hier nichts.
So,
$a->new_property = null;
ist sowas von. Aber gibt es einen „eleganteren“ Weg?
Können Sie den Code posten, wie Sie es mit unset versucht haben? In meinem Sinne sollte unset funktionieren. Aber möglicherweise duplizieren Sie den Kontext
– Arschtief
30. August 2010 um 13:29 Uhr
Ich bin mir wirklich nicht sicher, wie unset () eleganter ist als = null, aber vielleicht bin ich das nur
– Robert Sinclair
2. Juli 19 um 4:13 Uhr
Yanik Rochon
unset($a->new_property);
Dies funktioniert für Array-Elemente, Variablen und Objektattribute.
nb Es ist nicht möglich, eine Eigenschaft mit einem ganzzahligen Schlüssel direkt zu deaktivieren. z.B $o=(object)array('a','b','c'); (Sie müssen das Objekt (zurück) in ein Array umwandeln, sogar um es einfach zu machen Zugriff solche Eigenschaften!)
– danorton
19. März 14 um 22:09 Uhr
@YanickRochon, mein Kommentar handelt von einem objectnicht ein array. 😉
– danorton
21. März 14 um 2:39 Uhr
@danorton warum sollte jemand bei klarem Verstand ein konvertieren array In ein object? Es macht einfach keinen Sinn (selbst wenn PHP es zulässt). Ich werde keine schlechten Programmiergewohnheiten fördern und verbreiten, indem ich dies kommentiere 🙂 Nichts für ungut.
– Yanik Rochon
21. März 14 um 2:54 Uhr
@YanickRochon Dies kann sinnvoll sein, wenn Sie die Eigenschaften zweier Objekte zusammenführen möchten (die keine Methode haben, sondern nur als Speichermedium verwendet werden): In diesem Fall besteht der schnellste und einfachste Weg darin, beide Objekte in Arrays zu konvertieren, um array_replace_recursive anzuwenden () und danach wieder auf Objekte. Warum jemand ein Objekt nur zum Speichern von Eigenschaften verwenden würde, geschieht häufig in Anwendungen, die Datensätze aus Datenbanken wie MySQL als Objekt anstelle eines Arrays abrufen (unter Verwendung von Standardfunktionen wie mysql_fetch_object()).
– gierig
21. Januar 15 um 20:37 Uhr
@danorton FYI, seit 7.2 können Sie das tun unset($o->{0}); oder $k = 0; unset($o->$k);.
– Sarke
12. Juni 20 um 4:20 Uhr
Sajjad Ashraf
Dies funktioniert auch besonders, wenn Sie über ein Objekt schleifen.
unset($object[$key])
Aktualisieren
Neuere Versionen von PHP werfen 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 verwenden
unset($object->{$key})
Können Sie angeben, welche “neueren” Versionen beschrieben werden? Bei mir mit PHP 7.1 unset($object[$key]) funktioniert und unset($object->{$key}) nicht (genauer gesagt unset($object['literal_key']) und unset($object->{'literal_key'})). PS Hm, ich kann mich irren, wenn ich denke, dass das, was ich bearbeite, ein Objekt ist, kein Array
– Jakow L
5. Januar 19 um 13:28 Uhr
Hebt keine Eigenschaft einer Sammlung von Objekten auf.
– Viktor Joras
15. August 19 um 17:14 Uhr
Dies funktioniert auch, wenn Sie über ein Objekt schleifen.
unset($object->$key);
Es müssen keine Klammern verwendet werden.
Diese Frage fügt im Vergleich zu der von @YannickRochon nichts Neues hinzu.
– helve
5. März 19 um 15:55 Uhr
Dieser Code funktioniert gut für mich in einer Schleife
Setzen Sie ein Element auf null, setzen Sie einfach den Wert des Elements auf null, das Element existiert noch
Ein Element zurücksetzen bedeutet, das Element zu entfernen, es funktioniert für Arrays, stdClass-Objekte, benutzerdefinierte Klassen und auch für jede Variable
<?php
$a = new stdClass();
$a->one = 1;
$a->two = 2;
var_export($a);
unset($a->one);
var_export($a);
class myClass
{
public $one = 1;
public $two = 2;
}
$instance = new myClass();
var_export($instance);
unset($instance->one);
var_export($instance);
$anyvariable="anyValue";
var_export($anyvariable);
unset($anyvariable);
var_export($anyvariable);
.
7589000cookie-checkIst es möglich, die Eigenschaft eines Objekts in PHP zu löschen?yes
Können Sie den Code posten, wie Sie es mit unset versucht haben? In meinem Sinne sollte unset funktionieren. Aber möglicherweise duplizieren Sie den Kontext
– Arschtief
30. August 2010 um 13:29 Uhr
Ich bin mir wirklich nicht sicher, wie unset () eleganter ist als = null, aber vielleicht bin ich das nur
– Robert Sinclair
2. Juli 19 um 4:13 Uhr