我仍在學習如何使用類,我想知道什麼時候應該使用關鍵字extends
(擴展一個類)。擴展PHP類
比方說,我有一個類,做事情A(而且它是一個單身人士)。即使B類與A類並不真正相關,但是它使用了很多方法,可以將它擴展到另一個B類嗎?或者我應該創建一個新班級?
我仍在學習如何使用類,我想知道什麼時候應該使用關鍵字extends
(擴展一個類)。擴展PHP類
比方說,我有一個類,做事情A(而且它是一個單身人士)。即使B類與A類並不真正相關,但是它使用了很多方法,可以將它擴展到另一個B類嗎?或者我應該創建一個新班級?
在面向對象編程中,如果一個類是具有更多特定用途的該類的特殊類型,則它通常應該擴展另一個類。
例子:class自行車擴展汽車
不好的例子:汽車類擴展自行車(可以共享類似的方法,但是這並沒有真正意義)
確保您創建一個新的靜態成員,用於存儲單例實例並超載getInstance()
方法。如果不是,那麼即使您致電B::getinstance()
,您也將最終訪問A實例,因爲這兩個類都只有一個靜態成員。
當談到面向對象的編程時,通常一個類會執行特定的任務,如保存用戶信息或輸入/輸出控制。
當我們說1個用於控制輸出的對象時,您可以在該對象中設置一個方法來控制輸出類型,或者應該如何處理每個特定內容,但這意味着對象唯一的目的已經被打破,因爲它現在不僅僅是發送內容,而且還根據其類型來操縱內容。
中,我們使用了過來,這是通過將一組任務的成團的類/對象,例如一個辦法:
abstract class Output
{
public $content_type = 'text/plain';
public function _send(){}
}
輸出類顯然有更多的方法,但僅方法有關ouputting內容,如頭部等,而不是內容的操作,那麼你會碰到這樣的:
class HTMLOutput extends Output
{
public $content_type = 'text/html';
}
和內容的操作:
class CSSOutput extends Output
{
public $content_type = 'text/css';
public _send()
{
if($_SERVER['APP']['Settings']['CSSCompress'] == '1')
{
$this->_compress_css();
}
parent::_send();
}
private function _compress_css()
{
$this->content = ; //Some compression lib
}
}
這是我在創建和組織許多分組的類/對象時遵守的主要體系結構要點。
你能解釋一下在什麼情況下你需要擴展單例類嗎?也許還有其他設計方法...你聽說過依賴注入模式嗎? –