Во многих моих 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», из которого наследуются все родительские классы. Это не изящно, но это все, о чем я могу думать. –