Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Cannot declare promoted property in an abstract constructor

Description

It is not possible to use a promoted property in an abstract constructor. The promoted property is akin to concrete code (the property assignation), while the abstrat constructor has no body.

On the other hand, a child class may overwrite the constructor signature with a promoted property, so it is possible to define properties that way, but not on an abstract method.

In order to enforce a property, from an abstract class, the property must be defined out of the constructor.

Example

<?php

abstract class X {
	abstract function __construct(private string $a);
}

?>

Alternatives

  • Remove the abstract from the constructor.
  • Define the property outside the construtor.
  • Check all children classes, so they all have the promoted property in their constructor definition.