PHP 8 constructor promotion with inheritance (subclasses)
PHP 8 has this amazing feature called “constructor promotion” that allows you to define the properties of a class and set them in one go via the constructor. This removes a lot of boilerplate. However, how do we create a subclass which defines additional properties?
Here we have the base class that we want to extend:
<?php
class User {
public function __construct(
public string $username,
public string $firstname,
public string $lastname
) {}
}
Here is a subclass which adds a token, and unix timestamp to the user model.
<?php
class UserWithToken extends User {
public function __construct(
public string $token,
public int $loginTime,
…$args) {
parent::__construct(…$args);
}
}
Note that the spread operator (…) on $args basically takes the rest of the arguments passed into the constructor and allows us to pass them back on up to the base class constructor(User).
Now we can instantiate our userWithToken as follows:
<?php
$username = ‘Guy.Thomas’;
$firstname = ‘Guy’;
$lastname = ‘Thomas’;
$authtoken = uniqid();
$userWithToken = new UserWithToken($authtoken, time(),
$username, $firstname, $lastname);
Notice how the only drawback is that the subclass properties have to be defined first.
If you don’t like the order in which the arguments are passed, you can get around this by using named arguments:
<?php
$username = ‘Guy.Thomas’;
$firstname = ‘Guy’;
$lastname = ‘Thomas’;
$authtoken = uniqid();
$userWithToken = new UserWithToken(…[
‘username’ => $username,
‘firstname’ => $firstname,
‘lastname’ => $lastname,
‘authtoken’ => $authtoken,
‘loginTime’ => time()
]);
Since the arguments are named, the order doesn’t matter!
You can see this in action here:
PHP Sandbox – Execute PHP code online through your browser
Conclusion — constructor promotion works great with sub classes!
Source: https://brudinie.medium.com/feed
- PHP 8.0 Model Classes with constructor promotion – 24th November 2024
- Moodle jobs: Program Administrator (Moodle LMS) – Full-time – Herndon, VA, USA – 21st November 2024
- Moodle Educator Certificate course starts 1st October – 8th September 2024