有没有简单的方法从对象中删除成员?不只是将其设置为null,而是实际删除它。从对象中移除成员?
谢谢! :)
编辑:我已经尝试unset(),并将成员变量设置为null显然不起作用。我想我可以将对象转换为一个数组,然后删除有问题的数组键,然后转换回一个对象,但blech ...有一个更简单的方法!
有没有简单的方法从对象中删除成员?不只是将其设置为null,而是实际删除它。从对象中移除成员?
谢谢! :)
编辑:我已经尝试unset(),并将成员变量设置为null显然不起作用。我想我可以将对象转换为一个数组,然后删除有问题的数组键,然后转换回一个对象,但blech ...有一个更简单的方法!
您正在使用RedBean。刚刚检查出来。而这些bean对象没有实际的属性。
unset($bean->field);
不行的,因为->field
是虚拟属性。它不存在于课堂上。相反,它驻留在您无法访问的protected $bean->properties[]
中。 RedBean仅实现用于检索和设置属性的神奇方法__get
和__set
。
这就是为什么unset()
不起作用。它解除了在该位置从未存在的财产。
不,您也不能在Runkit模块中找到完成该方法的方法,即使存在删除methods/functions/constants的方法。
$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);
内你反对,你可以定义一个名为__unset
class Test
{
public $data = array();
public function __unset($key)
{
unset($this->data[$key]);
}
}
魔术方法和Jon总结了其他很好的因素。
RedBean在bean上有一个removeProperty方法。
感谢您的评论!这应该对这个问题的新手有所帮助。我相信这在大约2011年初的RedBean中是不可用的(现在几乎是三年后)。实际上,回到当天(正如你在上面我的2013年1月17日的评论中可以看到的那样),我添加了一个magic setter来让unset()直接用在bean本身上。 – rinogo 2014-03-12 14:48:22
您是否想仅仅因为您的不想将其存储在数据库中而取消设置属性?
如果是这样,只需在该类中声明该属性为private
即可。
TBH,四年前我问过这个问题,所以我不记得。无论如何,谢谢你的回答!也许它会帮助别人! :) – rinogo 2015-02-06 16:45:42
随着红豆4,您可以使用
unset($bean->someproperty);
我想你可能想看看通过反射提供了一些可能性。不是100%,但Reflection类提供了一些全面的功能。另外,好奇; *为什么*? – Dan 2011-03-19 00:23:37
你如何检查它是否被删除? isset?的var_dump? – NikiC 2011-03-19 00:24:05
我在持久层中使用RedBean;它为Bean上的每个成员(一个对象)创建一个列。我使用的效用函数有一个剩余的成员变量;而不是重写效用函数,我宁愿删除有问题的成员变量。 – rinogo 2011-03-19 00:25:11