我正在用新的基於PDO的版本替換舊數據庫層。使用PDO傳遞構造函數參數:: FETCH_CLASSTYPE
但是我遇到了一個問題:
當使用fetchObject
獲取對象,我可以傳遞參數的對象構造。
但是我現在正在移植一個有幾個子類的類,它們都存儲在同一個表中,我想使用FETCH_CLASSTYPE
。這意味着我必須使用我不能傳遞構造函數參數的常規方法fetch()
。
是否有另一種方法可以做到這一點?
我可以重新命名構造函數,並手動調用它,但我想要一個乾淨的解決方案。
我正在用新的基於PDO的版本替換舊數據庫層。使用PDO傳遞構造函數參數:: FETCH_CLASSTYPE
但是我遇到了一個問題:
當使用fetchObject
獲取對象,我可以傳遞參數的對象構造。
但是我現在正在移植一個有幾個子類的類,它們都存儲在同一個表中,我想使用FETCH_CLASSTYPE
。這意味着我必須使用我不能傳遞構造函數參數的常規方法fetch()
。
是否有另一種方法可以做到這一點?
我可以重新命名構造函數,並手動調用它,但我想要一個乾淨的解決方案。
似乎沒有內置解決方案。無論如何,API的這部分看起來不太好。您可以使用一種解決方法:
$stmt->setFetchMode(PDO::FETCH_ASSOC);
while ($row = $stmt->fetch()) {
/* "Factory" */
$obj = new $row['class_name_column']('constructor', 'args');
unset($row['class_name_column']);
foreach ($row as $key => $value) {
$obj->$key = $value;
}
var_dump($obj);
}
我認爲在獲取後立即調用返回實例的初始化方法是完全乾淨的。
據報道作爲#62567一個PHP錯誤
你可以解決它的任何類名傳遞的第二個參數與構造