¿Es posible eliminar la propiedad de un objeto en PHP?

Resuelto valk asked hace 54 años • 6 respuestas

Si tengo algo stdObjectque decir $a,.

Seguro que no hay problema en asignar una nueva propiedad $a,

$a->new_property = $xyz;

Pero luego quiero eliminarlo, por lo unsetque no sirve de nada.

Entonces,

$a->new_property = null;

es algo así. ¿Pero existe una forma más 'elegante'?

valk avatar Jan 01 '70 08:01 valk
Aceptado
unset($a->new_property);

Esto funciona para elementos de matriz, variables y atributos de objetos.

Ejemplo:

$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())
Yanick Rochon avatar Aug 30 '2010 13:08 Yanick Rochon

Esto también funciona especialmente si estás recorriendo un objeto.

unset($object[$key])

Actualizar

Las versiones más nuevas de PHP arrojan un error fatal Fatal error: Cannot use object of type Object as arraycomo lo menciona @CXJ. En ese caso, puedes usar corchetes en su lugar.

unset($object->{$key})
Sajjad Ashraf avatar Sep 09 '2014 15:09 Sajjad Ashraf

Establezca un elemento en nulo, simplemente establezca el valor del elemento en nulo, el elemento aún existe

Desarmar un elemento significa eliminar el elemento, funciona para matrices, objetos stdClass, clases definidas por el usuario y también para cualquier 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);
TexWiller avatar Jul 25 '2021 18:07 TexWiller

Esto también funciona si estás recorriendo un objeto.

unset($object->$key);

No es necesario utilizar soportes.

dandyboh avatar Feb 28 '2019 15:02 dandyboh