То, что вы просите, возможно только для статически типизированного языка, а поскольку PHP динамически типизирован, короткий ответ заключается в том, что это невозможно.
Например, в Java createMyInterface
можетвернуть IMyInterface
, и единственными возможными операциями над этим объектом являются те, которые определены в самом интерфейсе.Конечно, объект действительно имеет тип ConcreteImplOfMyInterface
, поэтому вы всегда можете привести его к этому типу для доступа к другим полям / методам.
PHP не имеет объявленных типов, поэтому вы возвращаете из функции следующее:просто «переменная» - она не имеет типа.И поскольку типов нет, все поиски полей / методов являются динамическими, поэтому всегда можно получить доступ ко всему, что «есть» в объекте.
В некотором смысле, интерфейсы действительно несколько ограничены в использовании в языкенапример, PHP - любой класс, который реализует интерфейс, должен реализовывать все его методы, но, поскольку нет никакой гарантии относительно того, что функция может возвратить в первую очередь, по сути, вообще нет никакой гарантии.Лучшее, что вы можете сделать, это использовать instanceof
, чтобы проверить, реализует ли неизвестная переменная данный интерфейс.