Duck typing

Not what something is, but what something is capable of doing, What something does.

What it does, rather than what it is.

Идеята на duck typing е, че не задаваш изрично типът на входният параметър на дадена функция/метод, а го подаваш или без конкретен тип или с тип интерфейс, и вътре във функцията/методът я използваш.

Това е най-ясно при обектите.
Подаваш различни обекти, които обаче имат методи с еднакви имена и сигнъчър, и екстендват даден абсклас или имплементират даден(и) интерфейси.

function animal($animal): void
{
    $animal->doSound();
}

Вместо да задаваш типа на $animal да в Dog, Cat, Horse…
оставяш параметъра без конкретен тип, или с тип интерфейс/абсклас, и му викаш методите, които правят каквото трябва.

За феновете на strict typing-a, още по-интелигентно би било всички тези обекти да имплементират един интерфейс или да екстендват един абсклас, и типът на параметъра $animal да е този интерфейс/абсклас.