2010-01-09 119 views
1

我有两个类ClassA和ClassB。 ClassA总是需要一个模板文件名,ClassB扩展了ClassA。我应该使用哪些OOP选项?

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

$classB = new ClassB('index'); 

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

所以用户只是想呼吁:

$bttn = new ClassX(); 

和内部ClassA的的构造函数被调用“button_template”。

要做到这一点,我看到这些选项:

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

哪一个是最好的?为什么?

+0

**仅B **当用户创建类并将参数的值明确设置为null时有意义。任何其他情况就像选项** C **。所以绝对不是B;) – 2010-01-09 20:01:51

回答

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

因为我不希望用户指定什么呢,也许这一个是最好的:(!排在我的脑海里张贴的问题后)

d)

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

这应该是你的问题的一部分,而不是答案。 – Sampson 2010-01-09 19:56:03

+0

没错。我想我只回答了我自己的问题。我想知道提供“不让用户设置任何东西”的最佳方式。如果这是一个错误的方法,请投票。 ;-) – openfrog 2010-01-09 19:57:38

+0

这是IMO的正确答案。 – 2010-01-09 19:58:55

0

C)给用户重写模板的选项,D)不。根据是否只使用按钮模板可以使用(d)或者可以使用任何模板,但是如果没有指定,默认情况下使用按钮模板(c)

相关问题