我应该使用以下哪些OOP选项?

时间:2010-01-09 19:54:26

标签: php oop

我有两个ClassA和ClassB类。 ClassA始终需要模板文件名,ClassB扩展ClassA。

在创建ClassB实例的通常情况下,用户必须指定模板文件名。像:

$classB = new ClassB('index');

但是现在我创建了一个扩展ClassA的ClassX,当用户使用ClassX时,他不能指定任何东西。这是一个只创建一个按钮的类,因此它自己知道模板文件是什么样的。

所以用户只想打电话:

$bttn = new ClassX();

并在内部使用'button_template'调用ClassA的构造函数。

为此,我看到了以下选择:

A)

public function __construct() {
    $tplName = func_get_arg(0);
    if (!isset($tplName)) {
        $tplName = 'button_template';
    }
    parent::__construct($tplName);
}

B)

public function __construct($tplName='button_template') {
    if (!isset($tplName)) {
        $tplName = 'index';
    }
    parent::__construct($tplName);
}

C)

public function __construct($tplName='button_template') {
    parent::__construct($tplName);
}

哪一个最好?为什么?

3 个答案:

答案 0 :(得分:2)

由于我不希望用户指定任何内容,也许这个是最好的:

(在发布问题后出现在我脑海中!)

<强> d)

public function __construct() {
    parent::__construct('button_template');
}

答案 1 :(得分:1)

我认为这是最好的方法:

#Class A:
public function __contruct($template){
  //do stuff
}

#Class X extends A
public function __contruct(){
   parent::__construct('button_template')
}

我觉得这是最好的方式,因为A类不应该关注C类想要什么(案例A)C类不应该接受除了buton_template之外的任何东西(案例B和C)

答案 2 :(得分:0)

C)为用户提供了覆盖模板的选项,D)没有。我会选择其中任何一个,具体取决于是否只使用按钮模板(d)或可以使用任何模板,但如果没有指定,则默认使用按钮模板(c)