Pregunta

Tengo una clase con algún método que depende de un parámetro. ¿Cuál es la mejor manera de escribir este método?

Ejemplo:

Primera vía

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*/);
    }
}

Segunda vía

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();

¿De qué manera elegirías?

¿Fue útil?

Solución

ninguno (a menos que explique con más claridad lo que está buscando). en general, los objetos especializados se consideran mejores que las ramas basadas en propiedades.

class Test {
    abstract function useIt();
}

class TestA extends Test {
    function useIt() { code for A }
}

class TestB extends Test {
    function useIt() { code for B }
}

Otros consejos

Elegiría la segunda manera, para empezar: call_user_func es una función pesada (y se usa mejor de otra manera) y ese código no sería estrictamente orientado a objetos, mientras que la segunda forma es.

Gracias por las respuestas.

He pensado en esto porque estoy construyendo una clase para la interacción de la base de datos. Así que sería bueno poder hacer esto:

$db=new DB(/* host, user etc*/, "mysql");
or
$db=new DB(/* host, user etc*/, "mysqli");

Pero sí, la mejor manera es la herencia y OO, puedo hacer algo como esto:

$db=new MysqlDB(/* host, user etc*/);
or
$db=new MysqliDB(/* host, user etc*/);

Gracias de nuevo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top