Удалить участника из объекта? - PullRequest
13 голосов
/ 19 марта 2011

Есть ли простой способ удалить член из объекта? Не просто установить его на ноль, но на самом деле удалить его.

Спасибо! :)

Edit: я уже пробовал unset (), и установка переменной-члена в null, очевидно, не работает. Я полагаю, что я мог бы преобразовать объект в массив, затем удалить соответствующий ключ массива и преобразовать обратно в объект, но все равно ... Должен быть более простой способ!

Ответы [ 8 ]

15 голосов
/ 19 марта 2011

Вы используете RedBean.Только что проверил.И эти объекты bean не имеют реальных свойств.

unset($bean->field);

Не работает, потому что ->field является виртуальным атрибутом .Это не существует в классе.Скорее, оно находится в protected $bean->properties[], к которому вы не можете получить доступ.RedBean реализует только магические методы __get и __set для получения и установки атрибутов.

Именно поэтому unset() не работает.Он отменяет свойство, которое никогда не существовало в этом месте.

10 голосов
/ 19 марта 2011
$obj = new stdClass;
$obj->answer = 42;
print_r($obj);
unset($obj->answer);
print_r($obj);

У меня отлично работает . Вы уверены, что все делаете правильно?

Обновление:

Это также работает для свойств, определенных в классах:

class Foo {
    public $bar = 42;
}

$obj = new Foo;
print_r($obj);
unset($obj->bar);
print_r($obj);
4 голосов
/ 19 марта 2011

внутри вашего объекта вы можете определить магический метод под названием __unset

class Test
{
    public $data = array();

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

И Джон хорошо суммировал другие факторы.

3 голосов
/ 12 марта 2014

RedBean имеет метод removeProperty для bean-компонентов.

1 голос
/ 29 июня 2017

С RedBean 4 вы можете использовать

unset($bean->someproperty);
1 голос
/ 19 марта 2011

Нет, вы не можете, и в модуле Runkit я не вижу способа сделать это, даже если существуют способы удаления методов / функций / констант .

1 голос
/ 19 марта 2011

Возможно unset () .

0 голосов
/ 06 февраля 2015

Вы хотите сбросить свойство просто потому, что не хотите, чтобы оно хранилось в базе данных?

Если это так, просто объявите свойство как private в классе.

Благодарность этому ответу: Не сохранение свойства php-redbean в базе данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...