覆盖构造函数以从数据库行创建对象
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);
我正在尝试覆盖我的构造函数以基于数据库中的行创建一个对象,但我不确定最好的方法。我的目标是能够在给定构造函数的情况下创建对象,但也能够从我的数据库中的一行创建对象。
这是我给定场景的伪代码:
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);