W3docs

Объектно-ориентированное программирование в PHP: понимание конструкторов

Узнайте, что такое конструкторы в PHP, как работает __construct(), как передавать параметры и использовать цепочку конструкторов при наследовании.

Термин «объектно-ориентированное программирование» (ООП) прочно вошёл в лексикон разработчиков программного обеспечения — и тому есть веские причины. ООП предлагает структурированный подход к созданию сложных, масштабируемых и удобных в сопровождении приложений. Одним из фундаментальных понятий ООП является конструктор, который играет ключевую роль при создании объектов и инициализации их свойств.

В PHP конструктор — это специальный метод, автоматически вызываемый при создании объекта. Его назначение — инициализировать свойства объекта и задать его начальное состояние. Начиная с PHP 5, метод конструктора называется __construct() (в PHP 4 использовалось имя класса). В этой статье мы подробнее рассмотрим синтаксис и функциональность конструкторов PHP.

Синтаксис конструкторов в PHP

Синтаксис объявления конструктора в PHP прост: внутри класса определяется метод с именем __construct(). Например:

Синтаксис конструктора в PHP

class Car {
   public function __construct() {
      // constructor code goes here
   }
}

Обратите внимание: в PHP модификатор видимости конструктора может быть public, protected или private, однако public используется чаще всего.

Конструктор не обязан принимать параметры, но вы можете их указать, чтобы передавать значения объекту при его создании. Например:

Синтаксис конструктора PHP с параметрами

class Car {
   public function __construct($make, $model) {
      $this->make = $make;
      $this->model = $model;
   }
}

Начиная с PHP 8.0, можно использовать продвижение свойств конструктора (constructor property promotion), позволяющее объявлять и инициализировать свойства в одном шаге:

Продвижение свойств конструктора в PHP 8

class Car {
   public function __construct(
      public string $make,
      public string $model
   ) {}
}

Это сокращает шаблонный код и стало стандартной практикой для простых классов-данных.

Функциональность конструкторов в PHP

Основная задача конструктора — инициализировать свойства объекта и установить его состояние. При создании объекта конструктор вызывается автоматически, выполняя весь код внутри него. Например, с помощью конструктора можно присваивать значения свойствам объекта:

Конструктор PHP для задания значений свойств объекта

class Car {
   public $make;
   public $model;

   public function __construct($make, $model) {
      $this->make = $make;
      $this->model = $model;
   }
}

В этом примере конструктор принимает два параметра — $make и $model — и соответствующим образом задаёт значения свойств $make и $model.

Ещё один распространённый случай применения конструкторов — инициализация объектов значениями по умолчанию. Например:

Инициализация объектов в PHP значениями по умолчанию

class Car {
   public $make;
   public $model;

   public function __construct($make = "Unknown", $model = "Unknown") {
      $this->make = $make;
      $this->model = $model;
   }
}

$myCar = new Car("Toyota", "Camry");
echo $myCar->make; // Outputs: Toyota

В этом примере конструктор имеет значения по умолчанию для $make и $model, поэтому если эти значения не указаны при создании объекта, будут использованы значения по умолчанию.

Цепочка конструкторов при наследовании

При расширении класса нередко требуется вызвать родительский конструктор, чтобы убедиться в правильной инициализации родительского класса. Для этого используется parent::__construct():

Цепочка вызовов родительского конструктора в PHP

class ElectricCar extends Car {
   public function __construct($make, $model, public int $batteryCapacity) {
      parent::__construct($make, $model);
      // additional initialization for the child class
   }
}

Это гарантирует, что и дочерний, и родительский классы сохраняют правильное начальное состояние.

Заключение

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

Practice

Практика
Что из перечисленного верно относительно конструктора PHP согласно статье на W3docs?
Что из перечисленного верно относительно конструктора PHP согласно статье на W3docs?
Was this page helpful?