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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top