1

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

どちらを選びますか?

4

3 に答える 3

5

どちらでもない(あなたが何を求めているのかをより明確に説明しない限り)。一般に、特殊なオブジェクトは、プロパティベースの分岐よりも優れていると見なされます。

class Test {
    abstract function useIt();
}

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

class TestB extends Test {
    function useIt() { code for B }
}
于 2009-10-23T09:18:49.973 に答える
0

手始めに、2番目の方法を選択します。call_user_funcは重い関数であり(他の方法で使用するのが最適です)、そのコードは厳密にはオブジェクト指向ではありませんが、2番目の方法です。

于 2009-10-23T09:19:16.367 に答える
0

回答ありがとうございます。

データベースの相互作用のためのクラスを構築しているので、私はこれについて考えました。したがって、これを実行できると便利です。

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

しかし、はい、最良の方法は継承とOOです。私は次のようなことを行うことができます。

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

もう一度ありがとう。

于 2009-10-23T09:28:33.290 に答える