我有两个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);
}
哪一个最好?为什么?
答案 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)