如何确定DB_DataObject实例的状态?

时间:2010-02-16 18:01:36

标签: php oop pear

当我向各种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”的状态?

使用当前实例与创建类的新实例是否有经验法则或设计?

1 个答案:

答案 0 :(得分:0)

如果您的方法需要“干净状态”(类变量设置为其默认值),则只需创建一个新实例。

你要保存的只是一个对象实例化,这很便宜。

您可以使用[ReflectionClass::getDefaultProperties()][1]确定状态是否已更改,并将其与当前属性值进行比较。然后你必须检查是否动态添加了任何新属性。

或者,创建一个新实例并将所有属性与当前属性进行比较:)