是否有一种从对象中删除成员的简单方法?不只是将其设置为null,而是实际将其删除。
谢谢! :)
编辑:我已经尝试过unset(),并且将成员变量设置为null显然不起作用。我想我可以将对象转换为数组,然后删除有问题的数组键,然后将其转换回对象,但是发誓......必须有一种更简单的方法!
答案 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
。