Skip to content

Object Oriented Programming in PHP: Understanding Constructors

The term Object Oriented Programming (OOP) has become a buzzword in software development for good reason. It provides a structured approach to building complex, scalable, and maintainable applications. A fundamental concept in OOP is the constructor, which plays a crucial role in creating objects and initializing their properties.

In PHP, a constructor is a special method automatically called when an object is instantiated. Its purpose is to initialize the object's properties and set its initial state. Since PHP 5, the constructor method is named __construct() (legacy PHP 4 used the class name). In this article, we will take a closer look at the syntax and functionality of PHP constructors.

The Syntax of Constructors in PHP

The syntax for defining a constructor in PHP is straightforward. You define a method named __construct() inside the class. For example:

Syntax of Constructors in PHP

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

Note that in PHP, constructor visibility can be public, protected, or private, though public is the most common.

A constructor does not require parameters, but you can include them to pass values to the object upon creation. For example:

Syntax of Constructors in PHP that includes parameters

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

Since PHP 8.0, you can use constructor property promotion to declare and initialize properties in a single step:

PHP 8 constructor property promotion

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

This reduces boilerplate and is now the standard practice for simple data classes.

The Functionality of Constructors in PHP

The primary function of a constructor is to initialize the object's properties and set its state. When an object is instantiated, the constructor is automatically called, executing any code inside it. For example, you can use a constructor to assign values to an object's properties:

PHP constructor to set the value of an object's properties

php
class Car {
   public $make;
   public $model;

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

In this example, the constructor takes two parameters, $make and $model, and sets the value of the $make and $model properties accordingly.

Another common use case for constructors is to initialize objects with default values. For example:

PHP initialize objects with default values

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

In this example, the constructor has default values for $make and $model, so if these values are not provided when an object is created, the default values will be used instead.

Constructor Chaining in Inheritance

When extending a class, you often need to call the parent constructor to ensure the parent class is properly initialized. This is done using parent::__construct():

PHP parent constructor chaining

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

This ensures both the child and parent classes maintain their correct initial states.

Conclusion

Constructors are a powerful and essential part of Object Oriented Programming in PHP. They allow developers to initialize objects and set their state when they are created, making it easier to build complex, scalable, and maintainable applications. By understanding the syntax and functionality of constructors, you can take your PHP development skills to the next level and create more efficient, high-quality code.

Practice

What is true about the PHP constructor according to the article on W3docs?

Do you find this helpful?

Dual-run preview — compare with live Symfony routes.