Это очень простой архитектурный вопрос, и поэтому он очень гипотетический.Перехват метода, основанный на условии, проверенном родительским классом
Представьте себе эту простую схему:
У меня есть класс, представляющий веб-объект, только один метод, который делает объект. Однако этот класс расширяет родительский класс, который требует выполнения определенных условий, так что метод фактически выполняется (так что объект визуализируется).
Пример
class webObject__adminBase {
protected function shouldRender(){
return access::isAdmin();
}
}
class webObject__adminPanel extends webObject__adminBase {
public function invoke(){
if(!parent::shouldRender())
return;
// if still here, render the object
}
}
$panel = new webObject__adminPanel();
$panel->invoke();
Код выше служит как: пример плюс практический пояснительный подход к решению проблемы.
Проблема заключается в следующем: я хотел бы обойти эту проблему, не имея необходимости вызывать метод в родительском классе в методе рендеринга ребенка.
Я хотел бы получить дизайн класса, который гарантирует, что все, что мне нужно сделать, это расширить родительский класс webObject__adminBase
. Любые вызовы любых методов в моем дочернем классе должны быть проверены на определенных условиях (как в этом примере systemAccess::isAdmin()
) и выполнять только при выполнении этих условий.
Надеюсь, мое описание ясное.
Поскольку кто-то на самом деле просил, чтобы закрыть этот вопрос, как «слишком широким», я решил перефразировать мой актуальный вопрос с более прямой ссылкой на название вопроса:
Есть ли способ перехвата (или даже выполнение) дочернего метода на основе условия, проверяемого его родительским классом (без вызова метода для этого родительского класса)?
Существуют синтаксические ошибки, сумасшедшее соглашение об именах и не допускаемый доступ к защищенным методам.Если это пример, это плохой tbh – PeeHaa
Спасибо, что указали это. Должно было быть осторожнее, набрав его. Однако я не вижу проблем с именованием. Пожалуйста, уточните, чтобы я мог улучшить. – SquareCat
Ваши имена классов для одного. По большинству конвенций имена классов - это верблюжий случай. И в чем эти двойные подчеркивания. Также похоже, что вы пытаетесь использовать символы подчеркивания для классов пространства имен вместо использования фактических пространств имен. – PeeHaa