Пример :
Интерфейс
public function doFoo($bar);
Могу ли я иметь класс, реализующий интерфейс с методом
public function doFoo(array $bar = array('test')) { }
Что означает сигнатура метода в PHP?
Это просто имя метода и имя параметра?
Или тип подсказки и значения по умолчанию для параметров также включены?
Значение по умолчанию для аргумента не фиксируется с помощью интерфейса (для пояснения: значение не является фиксированным, но если интерфейс имеет значение по умолчанию, тогда классу, реализующему интерфейс, также необходимо значение по умолчанию, но это значение не является исправлено интерфейсом).
Однако когда интерфейс определяет метод с подсказкой типа, класс должен использовать ту же подсказку типа! Вы также можете увидеть это в руководство.
И цитата оттуда:
интерфейс, все вместе с подсказками, обеспечивает хороший способ убедиться, что конкретный объект содержит определенные методы. Смотрите instanceof оператора и введите подсказку.
Вы можете типа намек несколькими способами. Форматирование подписи метода в PHP идет:
class -> type -> variable -> default value
Таким образом, вы можете намекнуть, что param должен быть экземпляром такого класса, как:
function foo(someClass $bar)
или вы можете просто указать, что этот параметр должен быть callable
лайк:
function foo(callable $bar)
Точно так же вы можете напечатать подсказку для массива, как вы делали выше.
Параметр, не являющийся экземпляром указанного вами класса, приводит к фатальной ошибке.