我結束了幾次解決方案,其中有兩個類的層次結構。來自第一個(Greeters)hiearchy的類使用第二個(用戶)的類。覆蓋方法從派生子類獲取參數
繼承人例如:
class User {}
class Admin extends User {
function getSecretMessage() {
return "secret";
}
}
class Greeter {
public function hello(User $a) {
echo "hello!";
}
}
class AdminGreeter extends Greeter {
public function hello(Admin $a) {
parent::hello($a);
echo "in addition heres a secret of mine: " . $a->getSecretMessage();
}
}
在這裏,我有用戶和招待員的,在PHP中我收到錯誤(嚴格)
「AdminGreeter聲明::你好必須與迎賓::兼容你好「
我希望AdminGreeter::hello
簡單地使用來自更專門化類(Admin)的數據」擴展「Greeter::hello
。
我還有什麼替代方案可以構建類似的PHP?
我想主要的問題是,PHP不支持「方法重載」,從而如果我發送一個User
實例到AdminGreeter
它會中斷。但是如果我有「方法重載」,Greeter::hello
只會傳遞給用戶實例。
這可能是一個總體上不好的設計,因爲我最終遇到了這個問題,也許有人可以指出我對這個問題有更好的設計。
正如我旁註我似乎有同樣的問題,發展中的Objective-C
'Admin'不是一個類,它是一個[接口](http://php.net/manual/en/language.oop5.interfaces.php) – 2015-01-09 21:28:37
謝謝你的權利,我應該適當地使用措辭「類型「而不是」類「。我編輯的問題,以消除任何混淆:) – 2015-01-09 21:34:18
可能重複的[PHP的接口繼承 - 聲明必須兼容](http://stackoverflow.com/questions/19131157/php-interface-inheritance-declaration-must-be-兼容) – 2015-01-09 21:34:54