【问题标题】:Override constructor to create object from database row覆盖构造函数以从数据库行创建对象
【发布时间】:2020-07-29 19:58:04
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php oop php-7.4


    【解决方案1】:

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

    【讨论】:

    • 如果我有一个方法insert() 我能做到$queriedPO->insert()吗?
    • 是的,$queriedPO 将成为PurchaseOrder 的对象,并拥有它的方法。
    猜你喜欢
    • 2017-04-06
    • 2014-06-09
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 2014-04-11
    相关资源
    最近更新 更多