PHP, create_function или оценить ее во время выполнения?
-
06-07-2019 - |
Вопрос
У меня есть класс с некоторым методом, который зависит от одного параметра.Как лучше всего написать этот метод?
Пример:
Первый способ
class Test{
var $code;
function Test($type){
if($type=="A"){
$this->code=create_function(/*some args and some code*/);
}
else if($type=="B"){
$this->code=create_function(/*some args and some code*/);
}
}
function use(/*some args*/){
return call_user_func($this->code,/*some args*/);
}
}
Второй способ
class Test{
var $type;
function Test($type){
$this->type=$type;
}
function use(/*some args*/){
if($this->type=="A"){
//some code
}
else if($this->type=="B"){
//some code
}
}
}
$test=new Test("A");
$test->use();
Какой путь вы бы выбрали?
Решение
ни (если вы не объясните более четко, что вам нужно).как правило, специализированные объекты считаются лучше, чем ветвление на основе свойств.
class Test {
abstract function useIt();
}
class TestA extends Test {
function useIt() { code for A }
}
class TestB extends Test {
function useIt() { code for B }
}
Другие советы
Я бы для начала выбрал второй путь: call_user_func это тяжелая функция (и ее лучше всего использовать другими способами), и этот код будет строго не объектно-ориентированным, в отличие от второго способа.
Спасибо за ответы.
Я подумал об этом, потому что создаю класс для взаимодействия с базой данных.Так что было бы неплохо сделать это:
$db=new DB(/* host, user etc*/, "mysql");
or
$db=new DB(/* host, user etc*/, "mysqli");
Но да, лучший способ - это наследование и объектно-ориентированный подход, я могу сделать что-то вроде этого:
$db=new MysqlDB(/* host, user etc*/);
or
$db=new MysqliDB(/* host, user etc*/);
Еще раз спасибо.