Конструктор класса в PHP и его перегрузка

В версии PHP 5 мы получили возможность использовать конструктор класса, специальную функцию, объявляемую в классе, которая служит для инициализации экземпляра объекта. К сожалению, конструкторы, как и остальные методы класса в PHP, не могут быть «перегружены». Как это обойти, далее в статье.

Конструктор класса в PHP.

Конструктор объявляется как метод класса с именем __construct(). Он может содержать произвольное число параметров, и предназначен, прежде всего, для инициализации свойств создаваемого экземпляра объекта.

Пример функции-конструктора.

Иногда классу требуется объявить несколько разных конструкторов. Здесь можно применять разные подходы, весь перечень их ограничен лишь вашей фантазией. Я покажу вам несколько вариантов.

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

В таких языках как Си, перегрузка возможна за счет типизации входных параметров. Компилятор может отличить несколько функции с разными множествами вх. параметров (по количеству и по типу). В PHP мы объявляем только имя переменной, с которой функции может быть передано что угодно. Да и число параметров при вызове функции может быть иным, так устроен PHP.

Но мы можем анализировать актуальное число параметров, их тип, и запускать нужные ветки инициализации. Так мы получим нужный конструктор класса.

Смотрим соответствующие примеры.

Разное число параметров.

Если конструкторы должны отличаться только числом параметров, то это может выглядеть вот так:

В комментариях онлайн версии документации на php.net видел пример, где множественный выбор заменяют на вызов соответствующих методов класса.

Разные типы входных параметров.

PHP отличает скаляр от массива, массив от объекта и объекты разных типов.

Использование статических методов.

Это более универсальный подход. Мне он нравится тем, что мы можем использовать «говорящие» названия методов, создавая объект тем или иным способом. Легче читать программу, когда в названии вызываемой функции содержится дополнительная информация. Не нужно обращать внимание на число входных параметров и держать в голове типы этих переменных.

Так вы объявляете необходимое кол-во статических методов и используете их как конструкторы класса.

Использование дочерних классов.

Перегрузка внутри класса не доступна, но мы можем перегружать конструктор в дочерних классах. Перегрузить можно только public методы. Конструктор родителя вызывается с префиксом parent::.

Мне этот подход не нравится, потому что приходится плодить дочерние классы только для того, чтобы добавить ещё один конструктор. Но такая техника пригодится в более сложных случаях.

P.S.

Вариаций действительно много, что говорит о гибкости PHP. Приведенные примеры могут подтолкнуть вас придумать ещё один, лично только вам подходящий способ.

Мало букафф? Читайте есчо !

Проверка кодов ОГРН / ОГРНИП на PHP

Сентябрь 24, 2015 г.

Продолжая тему валидаторов, публикую код двух функций для проверки введенных пользователем кодов ОГРН или ОГРНИП. Проверка кода ОГРН. Код содержит 13 знаков, последний из них используется для проверки "контрольной суммы". [crayon-690e6f4fc3c68748589754/] ...

Читать

Работаем с датами широкого диапазона в PHP

Январь 28, 2016 г.

Многие не задумываются при работе в PHP со стандартными функциями даты-времени о диапазоне их применимости (date(), time(), mktime() и т.п). Так мы можем скоро столкнуться с проблемой, подобная которой случалась уже раньше - "ошибка 2000". Я прекрасно ...

Читать

urlencode vs rawurlencode: разница и примеры в PHP

Июль 3, 2025 г.

Если вам нужно передать данные в URL в PHP, вы наверняка сталкивались с функцией urlencode(). А может быть, слышали и о rawurlencode(). И ещё третья функция — http_build_query() — всплывает в ответах на форумах и в рекомендациях официальной документации. ...

Читать

Генератор случайной строки в одну строку кода на PHP

Ноябрь 21, 2018 г.

Задача генерации случайной строки возникает часто в алгоритмах связанных с безопасностью. Начиная с версии PHP 5.3, стала доступна функция [crayon-690e6f4fc4418432082041/] которая позволяет генерировать цепочку псевдослучайных байтов произвольной длины. ...

Читать
 

Комментарии к «Конструктор класса в PHP и его перегрузка»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий:

Много комментариев в “Конструктор класса в PHP и его перегрузка”

  1. Dmitriy Torin:

    Спасибо! полезная статья.

  2. Александр:

    Вот за это спасибо!!! Вы позволили мне не потерять время.

  3. Юрик:

    Статья отличная. Я не знаю ООП, но не сдается ли вам, что такие «трюки» говорят об урезанности ООП в PHP и в итоге это выливается в говнокод (ни в коем случае не критикую автора, просто философствую) ?

    • Нет:

      Наговнокодить можно и на Джава

    • PHP довольно специфичный язык, со своей узкой нишей применения, и он развивается именно исходя из этого. А итоговое качество кода — это субъективное понятие, которое может применятся к любым языкам.