【发布时间】:2010-08-17 17:54:47
【问题描述】:
在我的很多 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的事情,所有父类都从它继承。它并不优雅,但这是我能想到的。
标签: php oop multiple-inheritance