php - 覆盖构造函数以从数据库行创建对象
问题描述
我正在尝试覆盖我的构造函数以根据数据库中的一行创建一个对象,但我不确定最好的方法。我的目标是能够在给定构造函数的情况下创建对象,但也能够从数据库中的一行创建对象。
这是我给定场景的伪代码:
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()
方法可以是静态的并返回一个对象:
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);
推荐阅读
- c# - 使用 LINQ 将记录展平到父/子对象。无需重复数据
- java - 如何使用 Spring Boot Java 正确使用 React 中的 axios.post
- java - Java算术异常首先发生
- python - 无法用树莓派拦截我的遥控器在 433 MHz 的代码
- html - 将工作表另存为 HTML
- java - 更优雅的实现方式
- javascript - 如何使用 Stimulus 修复“未定义 Cookie”
- event-handling - 如何在 webComponent 中获取 event.target 和 event.currentTarget(在影子根中)
- node.js - TypeError:无法读取未定义的属性“basename”
- sqlite - 表 2 中不存在表 1 中的行的两个表中的 sql 行数