当我向各种DB_DataObject类添加方法时,我倾向于
Class Example extends DB_DataObject {
function methodx() //start fresh
{
$newObject = DB_DataObject::factory($this->__table);
/* do stuff with $newObject */
}
而不是
function methodx() //use current instance
{
/* do stuff with $this */
}
我意识到我这样做是因为我不知道如何确定$ this的状态。调用代码可能已执行以下任何操作:
$e = DB_DataObject::factory('Example'); $e->get(16); $e->methodx();
$e = DB_DataObject::factory('Example'); $e->somekey=$value; $e->methodx();
$e = DB_DataObject::factory('Example'); $e->somekey=$value; $e->find(); $e->methodx();
当我得到它时,如何确定“$ this”的状态?
使用当前实例与创建类的新实例是否有经验法则或设计?
答案 0 :(得分:0)
如果您的方法需要“干净状态”(类变量设置为其默认值),则只需创建一个新实例。
你要保存的只是一个对象实例化,这很便宜。
您可以使用[ReflectionClass::getDefaultProperties()][1]
确定状态是否已更改,并将其与当前属性值进行比较。然后你必须检查是否动态添加了任何新属性。
或者,创建一个新实例并将所有属性与当前属性进行比较:)