我有兩個類用於訪問我的數據庫中的兩個不同的表。他們都有一個相似的構造,看起來就像是:PHP - 我可以傳遞函數名稱作爲函數參數嗎?
function __construct($db) {
$this->db = $db;
$userDAO = DAO_DBrecord::createUserDAO($this->db);
$this->userDAO = $userDAO;
}
其他類有不同之處在於它使用createOtherTableDAO($this->db)
相同的構造。
我打算讓其他類這樣的類,如果我可以讓它們全部繼承相同的構造函數,並將createAppropriateTableDAO
作爲參數,那將很方便。
爲了澄清,在上面的第一種情況下,createUserDAO($this->db)
是一個靜態函數,它調用我的DAO類中的構造函數。在DAO的功能如下所示:
public static function createUserDAO($db) {
return new DAO_DBrecord($db, 'users');
}
我用這個方法來確保user
模型只能呼籲users
表DAO。
我是一個初學者,我不認爲我曾經見過任何我想要的東西。
將字符串作爲函數名稱傳遞時,不需要使用eval。 – CBusBus 2012-02-13 14:05:44
爲什麼不直接在父類構造函數中放置一個'switch'並傳遞一個字符串來決定使用哪個dao?那會違反「開放 - 封閉原則」嗎? – JDelage 2012-02-13 14:45:11
此外,我不清楚在子構造函數中寫入'parent :: _ construct($ db)'的好處。爲什麼不簡單地寫'$ this-> db = $ db'(我們根本不需要父構造函數)。這實際上是我現在有我的代碼,但我希望通過在父類中有一個構造函數來簡化它(並且在子項中沒有)。 – JDelage 2012-02-13 14:52:38