Frage

Ich habe eine Klasse mit einiger Methode, die von einem Parameter abhängen. Was ist der beste Weg, um diese Methode zu schreiben?

Beispiel:

Erste Art und Weise

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

Zweiter Weg

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

Welchen Weg würden Sie wählen?

War es hilfreich?

Lösung

weder (es sei denn, Sie deutlicher erklären, was Sie nach). im Allgemeinen, sind spezialisierte Objekte betrachtet besser als eigenschaftsbasierte Verzweigung.

class Test {
    abstract function useIt();
}

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

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

Andere Tipps

Ich würde die zweite Möglichkeit, für den Anfang wählen: call_user_func ist eine schwere Funktion (und es ist am besten auf andere Weise verwendet wird) und dass Code würde in einer objektorientierten Art und Weise streng nicht sein, während die zweite Art und Weise ist es.

Vielen Dank für Antworten.

Ich habe darüber nachdenken becouse im eine Klasse für Datenbank-Interaktion zu bauen. So wäre es schön, kann dies tun:

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

Aber ja, der beste Weg ist die Vererbung und OO, kann ich einige, wie dies tun:

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

Dank wieder.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top