2010-01-09 159 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)

相關問題