Si j'ai un stdObject
mot à dire, $a
.
Bien sûr , il n'y a pas de problème d'attribuer une nouvelle propriété, $a
,
$a->new_property = $xyz;
Mais ensuite, je veux le supprimer, ce unset
n'est donc d'aucune utilité ici.
Donc,
$a->new_property = null;
est en quelque sorte. Mais y a-t-il une manière plus «élégante»?
Réponses:
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())
la source
$o=(object)array('a','b','c');
(vous devez convertir l'objet (retour) en un tableau même pour accéder simplement à de telles propriétés!)object
, pas unarray
. ;-)array
en unobject
? Cela n'a tout simplement aucun sens (même si PHP le permet). Je n'encouragerai pas et ne répandrai pas de mauvaises habitudes de programmation en commentant ceci :) Aucune offense.unset($o->{0});
ou$k = 0; unset($o->$k);
.Cela fonctionne également spécialement si vous bouclez sur un objet.
unset($object[$key])
Mise à jour
Les nouvelles versions de PHP
Fatal error: Cannot use object of type Object as array
génèrent une erreur fatale comme mentionné par @CXJ. Dans ce cas, vous pouvez utiliser des crochets à la placeunset($object{$key})
la source
unset($object[$key])
fonctionne etunset($object->{$key})
ne fonctionne pas (pour être plus précis,unset($object['literal_key'])
etunset($object->{'literal_key'})
). PS Hm, je me trompe peut-être, cependant, en pensant que la chose queCela fonctionne également si vous bouclez sur un objet.
unset($object->$key);
Pas besoin d'utiliser des crochets.
la source
Ce code fonctionne bien pour moi dans une boucle
$remove = array( "market_value", "sector_id" ); foreach($remove as $key){ unset($obj_name->$key); }
la source