Глосcарий Полиморфизм

Полиморфизм - это механизм взаимодействия классов, регулирующий поведение программного кода, когда разный программный код связан с одим именем. При использовании разветвленных наследственных иерархий все объекты производных классов автоматически снабжаются методами базового класса. Производные классы могут использовать методы базового класса без изменений, адаптировать их или заменять своей собственной реализацией. Как бы ни были реализованы эти методы, можно достоверно утверждать, что все объекты наследственной иерархии классов будут обладать некоторым количеством методов с одними и теми же названиями. Это явление называется полиморфизмом.

Если механизмы наследования и инкапсуляции обычно схожи во всех объектно-ориентированных языках программирования, то махнизм полиморфизма, это как раз то, чем они отличаются. Например, в Java, если мы создаем два метода с одинаковым именем, то, в зависимости от сигнатуры метода, происходит либо перегрузка, либо переопределение.

При перегрузке методов создается несколько методов с одинаковыми именами, но разными сигнатурами. Т.к. имена у методов одинаковые, то разные варианты метода могут отличаться типом возвращаемого значения или списком аргументов. Фактически имеем разные методы.

В отличии от перегрузки методов, при переопределении создаются методы с одинаковыми сигнатурами и атрибутами. Тогда, в зависимости от того, через какой объект (родительского класса, либо дочернего) мы можем обратиться к разным методам с одинаковыми именами.

А вот в PHP такого понятия, как перегрузка не существует, и не зависимо от сигнатуры и входящих параметров, происходит переопределение метода. Конечно, и в PHP, существуют механизмы имитации перегрузки, например, использование опциональных параметров метода или функции func_num_args().  Однако такие, конструкции имитирующие перегрузку приводят к запутанности кода, и в практике программирования на PHP практически не используются.

--