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

第二种方式

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

对于初学者,我会选择第二种方式:call_user_func是一个重型函数(最好以其他方式使用),并且该代码严格不是面向对象的方式,而第二种方式是。

于 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 回答