Skip to main content

Cleaner PHP code with promoted constructor properties

One of my favorite features that was introducted in PHP 8 was promoted constructor properties.

If I'm passing arguments into a constructor, I can declare a visibility and it will be promoted to a property on the class.

Here's an example of a value of a data transfer object that accepts a sort code and account number as strings:

class AccountDetails {

  public function __construct(
    public string $accountNumber,
    public string $sortCode,
  ) {}

}

Without promoted constructor properties, I'd need to create the properties and assign them manually, and I'd have this:

class AccountDetails {

  public string $accountNumber;

  public string $sortCode;

  public function __construct(
    string $accountNumber,
    string $sortCode,
  ) {
    $this->accountNumber = $accountNumber;
    $this->sortCode = $sortCode;
  }

}

Whilst text editors and IDEs can create the properties automatically, I prefer this as it's less code, more readable and easier to understand.

Was this interesting?

Subscribe to my daily newsletter for software professionals on software development and delivery, Drupal, DevOps, community, and open-source.

About me

Picture of Oliver

I'm a certified Drupal Triple Expert and former Drupal Association staff member with 18 years of experience, a Drupal core contributor, public speaker, live streamer, and host of the Beyond Blocks podcast.