Php 如何最好地编写一个类';更新对象状态的方法

Php 如何最好地编写一个类';更新对象状态的方法,php,oop,object,Php,Oop,Object,我有两种类型的对象,分别称为Object1和Object2。每当我对这些对象进行CRUD更改时,我都会将更改记录在一个特殊的“状态”表中。我正在编写处理每种类型对象的类,并开始处理状态。现在我有一个函数,状态数据随对象类型一起传递给它,然后它进行必要的DB插入,但是我想以某种方式将其写入类中,并且不确定最佳实践 我应该为状态创建第三个对象吗?我应该在每个对象中创建复制粘贴方法吗?这些方法执行相同的操作,但使用不同的硬编码措辞?我是否可以将这两个类扩展到第三个类中,为它们提供status方法 考虑

我有两种类型的对象,分别称为Object1和Object2。每当我对这些对象进行CRUD更改时,我都会将更改记录在一个特殊的“状态”表中。我正在编写处理每种类型对象的类,并开始处理状态。现在我有一个函数,状态数据随对象类型一起传递给它,然后它进行必要的DB插入,但是我想以某种方式将其写入类中,并且不确定最佳实践

我应该为状态创建第三个对象吗?我应该在每个对象中创建复制粘贴方法吗?这些方法执行相同的操作,但使用不同的硬编码措辞?我是否可以将这两个类扩展到第三个类中,为它们提供status方法

考虑这个问题的最好办法是我有一辆汽车和卡车。需要创建Garage方法,但我是否将其作为car和truck对象的方法,或其自己的对象,或是什么?

IMOH(可能我错了,我确信我错了),这是一种很好的方法:

abstract class Base{
    protected $type = null;
    public function setStatus($status){
        $sql = "UPDATE SET `status` = '$status' FROM `table` WHERE `type` = '{$this->type}'";
    }
}
class One extends Base{
    protected $type = "type1";
}
class Two extends Base{
    protected $type = "type2";
}

$one = new One();
$one->setStatus('pending');
$two = new Two();
$two->setStatus('died');
突然,一种疯狂的静态方式出现了

abstract class Base {
    protected static $type = null;
    public static function setStatus($status){
         $sql = sprintf("UPDATE SET `status` = '$status' FROM `table` WHERE `type` = '%s'",static::$type);
    }
}

class One extends Base{
    protected static $type = "one";
}

class Two extends Base{
    protected static $type = "two";
}

One::setStatus("idle");
Two::setStatus("dieing");

保持业务逻辑和数据访问层分离。我所做的事情是一个静态类,但我想对很多人来说有很多风格。静态方式也是一个很好的实现,我认为现在每天的OOP被误用和误解太多了,我见过很多程序员使用OOP,就像它是一个有很多函数的盒子一样。不。我的意思是说,可以将静态类用于数据访问层。这只是我做的事情,因为我很久以前就是这样写的。