Visibility and Constructors
Constructor Promotion
Constructor property promotion creates and initializes a property in one place.
compact initialization
Promoted constructor properties reduce repeated boilerplate for simple value objects.
Constructor Promotion
constructor_promotion.php
Replay: real traced execution (multi-file project)
<?php
class Course
{
public function __construct(private string $title, private int $lessons)
{
}
public function summary(): string
{
return $this->title . ":" . $this->lessons;
}
}
$lessons = 4;
$summary = (new Course("PHP", $lessons))->summary();
echo "lessons=" . $lessons . "\n";
echo "summary=" . $summary . "\n";
<?php
class Course
{
public function __construct(private string $title, private int $lessons)
{
}
public function summary(): string
{
return $this->title . ":" . $this->lessons;
}
}
$lessons = 2;
$summary = (new Course("PHP", $lessons))->summary();
echo "lessons=" . $lessons . "\n";
echo "summary=" . $summary . "\n";
<?php
class Course
{
public function __construct(private string $title, private int $lessons)
{
}
public function summary(): string
{
return $this->title . ":" . $this->lessons;
}
}
$lessons = 8;
$summary = (new Course("PHP", $lessons))->summary();
echo "lessons=" . $lessons . "\n";
echo "summary=" . $summary . "\n";
$lessons ← 4
14$lessons→ 4 = 4; //@lessons=2, 815$summary = (new Course("PHP", $lessons4))->summary();public function __construct(private string $title, private int $lesson…
3{4 public function __construct(private string $titlePHP, private int $lessons4)5 {6 }public function summary(): string
8public function summary(): string9{10 return $this->titlePHP . ":" . $this->lessons4;11}$summary ← PHP:4
14$lessons = 4; //@lessons=2, 815$summary→ PHP:4 = (new Course("PHP", $lessons4))->summary();1617echo "lessons=" . $lessons4 . "\n";18echo "summary=" . $summaryPHP:4 . "\n";outputlessons=4 summary=PHP:4
$lessons ← 2
14$lessons→ 2 = 2;15$summary = (new Course("PHP", $lessons2))->summary();public function __construct(private string $title, private int $lesson…
3{4 public function __construct(private string $titlePHP, private int $lessons2)5 {6 }public function summary(): string
8public function summary(): string9{10 return $this->titlePHP . ":" . $this->lessons2;11}$summary ← PHP:2
14$lessons = 2;15$summary→ PHP:2 = (new Course("PHP", $lessons2))->summary();1617echo "lessons=" . $lessons2 . "\n";18echo "summary=" . $summaryPHP:2 . "\n";outputlessons=2 summary=PHP:2
$lessons ← 8
14$lessons→ 8 = 8;15$summary = (new Course("PHP", $lessons8))->summary();public function __construct(private string $title, private int $lesson…
3{4 public function __construct(private string $titlePHP, private int $lessons8)5 {6 }public function summary(): string
8public function summary(): string9{10 return $this->titlePHP . ":" . $this->lessons8;11}$summary ← PHP:8
14$lessons = 8;15$summary→ PHP:8 = (new Course("PHP", $lessons8))->summary();1617echo "lessons=" . $lessons8 . "\n";18echo "summary=" . $summaryPHP:8 . "\n";outputlessons=8 summary=PHP:8