PHP, create_function ou avaliá-lo em tempo de execução?
-
06-07-2019 - |
Pergunta
Eu tenho uma classe com algum método que depende de um parâmetro. Qual é a melhor maneira de escrever este método?
Exemplo:
Primeira maneira
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*/);
}
}
A segunda maneira
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();
Qual o caminho que você escolheria?
Solução
nem (a menos que você explicar mais claramente o que você está depois). Geralmente, objetos especializados são considerados melhores do que-propriedade com base ramificação.
class Test {
abstract function useIt();
}
class TestA extends Test {
function useIt() { code for A }
}
class TestB extends Test {
function useIt() { code for B }
}
Outras dicas
Eu escolheria a segunda maneira, para começar: call_user_func é uma função pesada (e ele é melhor usado em outras formas) e que o código seria estritamente não de uma forma orientada a objeto, enquanto a segunda maneira que é.
Obrigado por respostas.
Eu tenho pensar sobre isso becouse im construção de uma classe para a interação de banco de dados. Então seria bom pode fazer isso:
$db=new DB(/* host, user etc*/, "mysql");
or
$db=new DB(/* host, user etc*/, "mysqli");
Mas sim, a melhor maneira é herança e OO, eu posso fazer alguma como esta:
$db=new MysqlDB(/* host, user etc*/);
or
$db=new MysqliDB(/* host, user etc*/);
Obrigado novamente.