首页 > 解决方案 > 覆盖构造函数以从数据库行创建对象

问题描述

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

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

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);

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

标签: phpoopphp-7.4

解决方案


constructFromDB()方法可以是静态的并返回一个对象:

  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);

推荐阅读