web-dev-qa-db-fra.com

Est-il possible de supprimer la propriété d'un objet en PHP?

Si j'ai un stdObject dire, $a.

Bien sûr, il n’ya aucun problème à assigner une nouvelle propriété, $a,

$a->new_property = $xyz;

Mais alors je veux l'enlever, donc unset n'est d'aucune aide ici.

Alors,

$a->new_property = null;

c'est gentil. Mais y a-t-il un moyen plus "élégant"?

175
valk
unset($a->new_property);

Cela fonctionne pour les éléments de tableau, les variables et les attributs d'objet.

Exemple:

$a = new stdClass();

$a->new_property = 'foo';
var_export($a);  // -> stdClass::__set_state(array('new_property' => 'foo'))

unset($a->new_property);
var_export($a);  // -> stdClass::__set_state(array())
305
Yanick Rochon

Cela fonctionne aussi spécialement si vous passez en boucle sur un objet.

unset($object[$key])

Mise à jour

Les versions les plus récentes de PHP déclenchent une erreur irrécupérable Fatal error: Cannot use object of type Object as array comme mentionné par @CXJ. Dans ce cas, vous pouvez utiliser des crochets à la place

unset($object{$key})
37
Sajjad Ashraf

Cela fonctionne également si vous passez en boucle sur un objet.

unset($object->$key);

Pas besoin d'utiliser des crochets.

1
dandyboh