2013-02-25 86 views
2

這不是一個問題,更多的是一個最佳實踐問題 - 我知道這些都受到意見的影響,但我確信這個問題必須有一個標準的約定。類方法命名問題 - 與擴展類衝突?

假設我有兩個班,AccountAssociate

Account包含幾種方法,這些方法對Associate有用,所以我自然會將Account類擴展到Associate

然而,當我有兩個同名的方法時,會出現一個問題,例如, create()

到目前爲止,爲了抵消這個問題而不是擴展父類,我已經將它實例化爲子類__construct()方法中的一個變量,然後通過它調用方法,例如, $this->Account->create();

有沒有另一種方法,例如在使用擴展類方法的同時仍然在子類中使用同名方法的規範?

任何答案將不勝感激!

+0

因爲我們不知道你的域名是我懷疑有人不能真實回答你的問題。 – mpm 2013-02-25 07:20:44

回答

1

Account包含幾種對Associate有用的方法,所以我很自然地將Account類擴展到Associate。

不,這不是自然的,你是在濫用繼承權。或者你會說聯營公司賬戶?如果它有一個帳戶,請使用組合。如果沒有,但帳戶類具有對助理類有用的方法,他們可能根本不應該在帳戶類中。將它們解壓到一個或多個可由Account和Associate使用的其他類。

+0

這是@OP的正確答案。 – PeeHaa 2013-02-25 09:32:10

+0

你對濫用繼承是正確的。然而,在我的情況下,員工是我認爲應該共享基本方法的多種賬戶之一,例如,會話/密碼散列等 - 也許我錯了嗎?沒有賬戶類型的帳戶:) – Kemebear 2013-02-25 10:47:40

+0

然後它取決於你如何看待它:如果'Associate'只是'Account'的一個**類型**,'Account'類可以有一個聚合的$類型'屬性(和'Associate'將實現一個'AccountType'接口)。 – 2013-02-25 10:54:31

0

如果您在子類方法中,則將使用$this調用子類方法。如果你想要父方法,你可以在子方法中調用parent::create();

但是,這是如果你絕對需要延長帳戶類,這聽起來不必要。如果「帳戶」類有public方法,那麼你並不需要擴展它,你可以打電話給他們實例化類之後:

$account = new Account(); 
$account->create(); 

或者,如果它是一個公共靜態方法:

$creation = Account::create();