从对象中删除成员?

时间:2011-03-19 00:16:37

标签: php class attributes

是否有一种从对象中删除成员的简单方法?不只是将其设置为null,而是实际将其删除。

谢谢! :)

编辑:我已经尝试过unset(),并且将成员变量设置为null显然不起作用。我想我可以将对象转换为数组,然后删除有问题的数组键,然后将其转换回对象,但是发誓......必须有一种更简单的方法!

8 个答案:

答案 0 :(得分:15)

您正在使用RedBean。刚检查出来。而这些bean对象没有实际的属性。

unset($bean->field);

不起作用,因为->field虚拟属性。它在课堂上不存在。相反,它驻留在您无法访问的protected $bean->properties[]中。 RedBean仅实现了用于检索和设置属性的魔术方法__get__set

这就是unset()不起作用的原因。它取消了在该位置从未存在的属性。

答案 1 :(得分:10)

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

Works fine for me。你确定你做得对吗?

<强>更新

It also works用于类中定义的属性:

class Foo {
    public $bar = 42;
}

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

答案 2 :(得分:4)

在你对象中你可以定义一个名为__unset

的魔术方法
class Test
{
    public $data = array();

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

Jon很好地总结了其他因素。

答案 3 :(得分:3)

RedBean在bean上有一个removeProperty方法。

答案 4 :(得分:1)

可能是unset()

答案 5 :(得分:1)

不,你不能,在Runkit模块中,我也没有找到实现这一目标的方法,即使存在删除methods/functions/constants的方法。

答案 6 :(得分:1)

使用RedBean 4,您可以使用

unset($bean->someproperty);

答案 7 :(得分:0)

您是否仅仅因为不希望它存储在数据库中而取消设置该属性?

如果是这样,只需在类中声明该属性为private

对此答案表示赞赏:Not saving property of a php-redbean to database