Поговорим о правильном написание ООП кода, а именно о разгрузке конструктора и внешней настройки объекта.
Классы писать исключительно так, чтобы всё используемое в них было заключено в них, т.е. не было никаких внешних обращений и зависимостей. Классы должны быть полностью автономны в этом плане.
Не запускать всю работу класса в конструкторе и не передавать в конструктор слишком много. Лучше выполнять всю работу в отдельном методе, который надо будет отдельно вызвать. Нужно это для того, чтобы можно было предварительно настроить объект после его создания. Поэтому конструктор не загружаем работой и не запускаем в нём работу автоматически иначе у нас не будет способа нормально настроить объект, а передавать в конструктор большое количество параметров неудобно. Это мешает масштабированности класса, ведь неизвестно сколько в будущем в него всего добавится, что нужно будет предварительно настраивать. Придётся постоянно расширять список аргументов конструктора. Это очень неудобно, поэтому конструктор не загружаем функционалом. В нём пишем самый минимум, а лучшее вообще оставлять его пустым, а всю работу выполнять в отдельном методе класса, который можно вызвать в любое время после создания объекта и его длительной настройки. А то, когда мы засовываемым весь функционал в конструктор и там же делаем всю работу, получается, что нам лень написать ещё одну строку вызова метода для основной работы класса, а от этого очень сильно страдает масштабируемость.
Примеры
Неправильное решение:
class CSpeaker { public function say($sWord, $bExclamation = false) { echo $sWord; if ($bExclamation) { echo '!'; } } public function __construct($sWord, $bExclamation = false) { $this->say($sWord, $bExclamation); } } $oCSpeaker = new CSpeaker('World', true);
При расширении класса придётся добавлять в конструктор аргументы и много кода. Есть вещи, которые для объекта надо задать только после его создания.
Правильное решение:
class CSpeaker { public $sWord; public $bExclamation; public function say() { echo $sWord; if ($bExclamation) { echo '!'; } } } $oCSpeaker = new CSpeaker(); $oCSpeaker->sWord = 'World'; $oCSpeaker->bExclamation = true; $oCSpeaker->say();
Создали объект класса. Настроили его как надо и вызывали метод для работы.