253 votes

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

Si j'ai un stdObject dites, $a .

Bien sûr, il n'y a aucun problème pour attribuer une nouvelle propriété, $a ,

$a->new_property = $xyz;

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

Donc,

$a->new_property = null;

c'est un peu ça. Mais existe-t-il un moyen plus "élégant" ?

0 votes

Pouvez-vous poster le code de votre essai avec unset ? Dans mon sens, unset devrait fonctionner, mais il est possible que vous dupliquiez le contexte.

0 votes

Je ne vois vraiment pas en quoi unset() est plus élégant que = null, mais peut-être que c'est juste moi

462voto

Yanick Rochon Points 18537
unset($a->new_property);

Cela fonctionne pour les éléments de tableaux, les variables et les attributs d'objets.

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())

10 votes

N.b. Il n'est pas possible d'annuler directement une propriété dont la clé est un nombre entier. par ex. $o=(object)array('a','b','c'); (Vous devez convertir l'objet (en retour) en un tableau même pour simplement accès de telles propriétés)

0 votes

@danorton, la question porte sur une object et non un array . Pour un tableau, vous devez épissure il.

5 votes

@YanickRochon, mon commentaire porte sur une object et non un array . ;-)

57voto

Sajjad Ashraf Points 301

Cela fonctionne aussi particulièrement si vous bouclez sur un objet.

unset($object[$key])

Mise à jour

Les versions plus récentes de PHP provoquent une erreur fatale 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})

0 votes

Pourriez-vous préciser de quelles versions "plus récentes" il s'agit ? Pour moi, avec PHP 7.1 unset($object[$key]) travaux et unset($object->{$key}) ne le fait pas (pour être plus précis, unset($object['literal_key']) y unset($object->{'literal_key'}) ). PS Hm, je peux me tromper, cependant, en pensant que la chose que je modifie est un objet, et non un tableau.

0 votes

N'annule pas une propriété d'une collection d'objets.

3voto

dandyboh Points 107

Cela fonctionne également si vous effectuez une boucle sur un objet.

unset($object->$key);

Il n'est pas nécessaire d'utiliser des parenthèses.

1voto

Ashiq Dey Points 128

Ce code fonctionne bien pour moi dans une boucle

$remove = array(
    "market_value",
    "sector_id"
);

foreach($remove as $key){
    unset($obj_name->$key);
}

0voto

TexWiller Points 178

Définir un élément à null définir juste la valeur de l'élément à null l'élément existe toujours

unset un élément signifie supprimer l'élément cela fonctionne pour les tableaux, les objets stdClass, les classes définies par l'utilisateur et aussi pour toute 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);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X