Я пытаюсь сделать интерфейс модели, в котором записаны разрешенные для пользовательского доступа методы.
Как мой контроллер (класс, обращающийся к модели) может проверить наличие метода в интерфейсе модели?
Контроллер хочет проверить, есть ли в интерфейсе определенной модели определенный метод, ведь в модели могут быть реализованы запрещённые для пользовательского доступа методы.
polak228, не придумывайте собственную терминологию.
Есть публичные методы/свойства - они доступны из вне.
Есть защищенные - доступны внутри класса, и в его производных.
Есть приватные - доступны только внутри класса.
Интерфейсы описывают наборы публичных методов, только сигнатуры, без реализаций.
Классы могут имплементировать необходимые интерфейсы.
interface MyInterface {
public function foo(string $s): bool;
public function bar(): void;
}
class MyClass implements MyInterface {
public function foo(string $s): bool {
return empty($s);
}
public function bar(): void {
$this->baz();
}
private function baz() {
// ...
}
}
$obj = new MyClass();
if ($obj instanceof MyInterface) {
// Интерфейс реализован, метод есть
$obj->bar();
}