Pregunta Eliminar un miembro de un objeto?


¿Hay una forma simple de eliminar un miembro de un objeto? No solo configúrelo como nulo, sino que realmente elimínelo.

¡Gracias! :)

Editar: Ya he probado unset (), y establecer la variable miembro a nulo obviamente no funciona. Supongo que podría convertir el objeto en una matriz, luego eliminar la clave de la matriz en cuestión, y convertir de nuevo a un objeto, pero blech ... ¡Tiene que haber una manera más fácil!


13
2018-03-19 00:16


origen


Respuestas:


Estás usando RedBean. Acabo de comprobarlo. Y estos objetos de frijoles no tienen propiedades reales.

unset($bean->field);

No funciona, porque ->field es un atributo virtual. No existe en la clase. Más bien reside en el protected $bean->properties[] a la que no puedes acceder RedBean solo implementa los métodos mágicos __get y __set para recuperar y establecer atributos.

Esta es la razón por la cual unset() No funciona. Desarma una propiedad que nunca existió en esa ubicación.


15
2018-03-19 08:24



$obj = new stdClass;
$obj->answer = 42;
print_r($obj);
unset($obj->answer);
print_r($obj);

Funciona bien para mí. ¿Estás seguro de que lo estás haciendo bien?

Actualizar:

También funciona para propiedades definidas en clases:

class Foo {
    public $bar = 42;
}

$obj = new Foo;
print_r($obj);
unset($obj->bar);
print_r($obj);

10
2018-03-19 00:25



dentro de tu objeto puedes definir un método mágico llamado __unset

class Test
{
    public $data = array();

    public function __unset($key)
    {
        unset($this->data[$key]);
    }
}

Y Jon resumió los otros factores muy bien.


4
2018-03-19 01:17



RedBean tiene un método removeProperty en beans.


3
2018-03-12 13:15



Posiblemente unset ().


1
2018-03-19 00:18



No, no se puede, ni en el módulo de Runkit veo una manera de lograr eso, incluso si se pueden eliminar métodos / funciones / constantes existe.


1
2018-03-19 00:25



Con RedBean 4 puedes usar

unset($bean->someproperty);

1
2018-06-29 14:16



¿Desea desarmar la propiedad simplemente porque usted no lo quiero almacenado en la base de datos?

Si es así, solo declare la propiedad como private en la clase.

Felicitaciones a esta respuesta: No se guarda la propiedad de un php-redbean en la base de datos  


0
2018-02-06 12:52