覆盖构造函数以从数据库行创建对象

Override constructor to create object from database row

我正在尝试覆盖我的构造函数以基于数据库中的行创建一个对象,但我不确定最好的方法。我的目标是能够在给定构造函数的情况下创建对象,但也能够从我的数据库中的一行创建对象。

这是我给定场景的伪代码:

class PurchaseOrder
{
  private $id;
  private $title;
  private $amount;

  function __construct($title, $amount)
  {
    $this->title  = $title;
    $this->amount = $amount;
  }

  function constructFromDB($pdo, $id)
  {
    $poValues       = queryPO($pdo, $id);           // fetches from db (psuedocode); 
    $this->title    = $poValues->title;
    $this->amount   = $poValues->amount;
  }
}

// Create new purchase order
$po        = new PurchaseOrder("Purchase Order 1", 100);

// Query purchase order from database
$queriedPO = new PurchaseOrder()->constructFromDB($conn, 1);

但是如您所知,我不能将构造函数留空以初始化我的对象。我不能让它成为静态函数,因为我需要能够操纵对象的属性。

constructFromDB()方法可以是静态的,return一个对象:

  public static function constructFromDB($pdo, $id)
  {
    $poValues = queryPO($pdo, $id);  // fetches from db (psuedocode); 
    $title    = $poValues->title;
    $amount   = $poValues->amount;
    $class    = __CLASS__;

    return new $class($title, $amount);
  }

然后静态调用:

$queriedPO = PurchaseOrder::constructFromDB($conn, 1);