Перегрузка конструктора в PHP

Перегрузка методов есть частный случай полиморфизма. С помощью перегрузки одно и то же имя может обозначать различные методы, причем методы могут различаться количеством и типом параметров. Наиболее актуально это для конструкторов. Ho PHP не позволяет иметь несколько методов __construct() в классе. Как же быть?

Предположим у нас есть класс Студент, и мы хотим создавать студентов на основе их студенческого номера или имени. А может быть номера мобильного телефона или емейл. Или еще как-нибудь.
Можно конечно напихать уродливых IF-ов в конструктор для определения аргументов.
Но есть более изящное решение. Это статические фабрики-помошники с разными аргументами, создающие объект. Собственно конструктор можно даже сделать недоступным, а можно оставить как один из возможных вариантов создания объекта. Читать полностью »