Summary: in this tutorial, you will learn how to use the PHP constructor to initialize the properties of an object.
Introduction to the PHP Constructor
PHP allows you to declare a constructor method for a class with the name __construct()
as follows:
<?php
class ClassName
{
function __construct()
{
// implementation
}
}
Code language: HTML, XML (xml)
When you create an instance of the class, PHP automatically calls the constructor method:
$object = new ClassName()
Code language: PHP (php)
Typically, you use the constructor to initialize the properties of the object.
The following example defines a constructor for the BankAccount
class. The constructor initializes the $accountNumber
and $balance
properties:
<?php
class BankAccount
{
private $accountNumber;
private $balance;
public function __construct($accountNumber, $balance)
{
$this->accountNumber = $accountNumber;
$this->balance = balance;
}
}
Code language: HTML, XML (xml)
Since the constructor has two parameters, you need to pass the corresponding arguments when creating a BankAccount
object:
$account = new BankAccount(1, 100);
Code language: PHP (php)
In this example, PHP automatically calls the __construct()
of the BankAccount
class. Hence, it assigns the $accountNumber
and $balance arguments
to the $accountNumber
and $balance
properties of the object.
PHP constructor promotion
In practice, you often need to assign the constructor arguments to corresponding properties. It’s kind of redundant.
To improve this, PHP 8.0 introduced a new concept called constructor promotion that promotes the constructor’s arguments to properties.
For example, instead of writing this:
<?php
class BankAccount
{
private $accountNumber;
private $balance;
function __construct($accountNumber, $balance)
{
$this->accountNumber = $accountNumber;
$this->balance = $balance;
}
}
Code language: HTML, XML (xml)
you can use this:
<?php
class BankAccount
{
function __construct( private $accountNumber, private $balance)
{
}
}
Code language: HTML, XML (xml)
When a constructor parameter includes an access modifier (public
, private
, or protected
) PHP will treat it as both a constructor’s argument and an object’s property. And it assigns the constructor argument to the property.
Sometimes, if you don’t want to promote constructor arguments, you can remove the access modifier. For example:
<?php
class BankAccount
{
function __construct(private $accountNumber, private $balance, $type)
{
}
}
Code language: HTML, XML (xml)
In this example, the $type
argument doesn’t include the access modifier. Therefore, it’s a regular parameter and won’t be promoted to a property.
Notice that the order of promoted-argument and non-promoted arguments can appear in the constructor in any order.
Summary
- PHP constructor is a special method that is called automatically when an object is created.
- Do use constructor promotion as much as possible to make the code shorter.