У меня есть два класса, которые я использую для доступа к двум различным таблицам в моем db. Они оба имеют такой же конструктор, который выглядит следующим образом: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
модель может только вызвать DAO на users
столе.
Я немного новичок, и я не думаю, что когда-либо видел что-то вроде того, чего хочу.
Использование eval не требуется при передаче строки в качестве имени функции. – CBusBus
Почему бы просто не поместить «switch» в конструктор родительского класса и передать строку, чтобы решить, какой dao использовать? Разве это нарушит «открытый принцип»? – JDelage
Кроме того, я не понимаю, как писать родительский конструктор ($ db) 'в дочернем конструкторе. Почему бы просто не написать '$ this-> db = $ db' (и нам вообще не нужен родительский конструктор). На самом деле, у меня есть мой код прямо сейчас, но я надеялся упростить его, имея один конструктор в родительском классе (и ни одного в дочерних элементах). – JDelage