PHP, create_function oder es zur Laufzeit bewerten?
-
06-07-2019 - |
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?
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.