在有很多我的PHP類的,我有這樣的代碼:PHP中的多重繼承的解決方法?
private $strError = "";
private $intErrorCode = NULL;
private $blnError = FALSE;
public function isError() {
return $this->blnError;
}
public function getErrorCode() {
return $this->intErrorCode;
}
private function setError($strError, $intErrorCode = NULL) {
$this->blnError = TRUE;
$this->intErrorCode = $intErrorCode;
$this->strError = $strError;
}
的一點是,這樣外部的代碼可以知道,如果一個對象有錯誤狀態,有什麼錯誤的字符串,等等。但在一堆不同的類中使用這個確切的代碼是重複的!
我很想有一個雙擴展名,我可以做
class childClass extends parentClass, error {
...
}
,並將這些屬性和方法與生俱來的,但是PHP不支持多重繼承。我在想的是創建一個存在於每個類中的錯誤類。如果我把它公開,我可以直接調用它通過對象
if ($myObject->error->isError()) {...}
,但不會也做出錯誤狀態從包含類以外的設定,
$myObject->error->setError("I shouldn't be doing this here");
我寧願避免?
或者,我可以寫「門戶」包含類的功能,它做了錯誤的對象在適當的調用,防止設置來自外部的錯誤狀態,
class childClass extends parentClass {
private $error;
public function __construct(...) {
...
$error = & new error();
...
}
public function isError() {...}
public function getError() {...}
public function getErrorCode() {...}
private function setError() {...}
...
}
但導致(一些)我試圖避免的代碼重複。
這裏的最佳解決方案是什麼?我試圖爲許多對象提供錯誤狀態的功能,以便外部世界能夠以最少的重複來看到它們的錯誤狀態。
我的猜測是你可以做一些類似於所有父類繼承的'BaseClass'。這並不高雅,但我能想到的就是這些。 – 2010-08-17 18:01:36