PHP、create_function、または実行時に評価しますか?
-
06-07-2019 - |
質問
1つのパラメーターに依存するメソッドを持つクラスがあります。 このメソッドを記述する最良の方法は何ですか?
例:
最初の方法
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*/);
}
}
2番目の方法
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();
どの方法を選択しますか?
解決
どちらでもない(あなたが何を求めているかをより明確に説明しない限り)。 一般的に、特殊なオブジェクトはプロパティベースの分岐よりも優れていると考えられています。
class Test {
abstract function useIt();
}
class TestA extends Test {
function useIt() { code for A }
}
class TestB extends Test {
function useIt() { code for B }
}
他のヒント
まず、2番目の方法を選択します: call_user_func は重い機能であり(他の方法で使用するのが最適です)、そのコードは厳密にオブジェクト指向ではありませんが、2番目の方法はそうです。
回答ありがとうございます。
データベースの相互作用のためのクラスを構築しているので、このことについて考えました。 だから、これを行うことができればいいと思います:
$db=new DB(/* host, user etc*/, "mysql");
or
$db=new DB(/* host, user etc*/, "mysqli");
しかし、はい、最良の方法は継承とオブジェクト指向です。次のようなことができます:
$db=new MysqlDB(/* host, user etc*/);
or
$db=new MysqliDB(/* host, user etc*/);
もう一度ありがとう。
所属していません StackOverflow