ใน PHP 8 มี Constructor Property Promotion เพิ่มเข้ามา ช่วยลดโค้ดซ้ำ (boilerplate) มากขณะสร้างอ็อบเจกต์ง่ายๆ คุณสมบัตินี้อนุญาตให้รวมฟิลด์ของคลาส การกำหนดคอนสตรัคเตอร์ และการกำหนดค่าตัวแปร ทั้งหมดในไวยากรณ์เดียว ลงในรายการพารามิเตอร์ของคอนสตรัคเตอร์
เราสามารถพูดได้ว่า แทนที่จะระบุพรอเพอร์ตี้ของคลาสและคอนสตรัคเตอร์แยกกัน เราสามารถรวมทั้งหมดเข้าด้วยกันได้โดยใช้ constructor property promotion
ตัวอย่างที่ 1: โค้ด PHP 7
<?php
class Account {
public float $a;
public float $b;
public float $c;
public function __construct(
float $a = 0.0,
float $b = 0.0,
float $c = 0.0,
)
{
$this->a = $x;
$this->b = $y;
$this->c = $z;
}
} ?>
ตัวอย่างที่ 2: โค้ด PHP 8
เราสามารถเขียนโค้ด PHP 7 ด้านบนใหม่ใน PHP 8 ได้ดังนี้ -
<?php
class Account {
public function __construct(
public float $a = 0.0,
public float $b = 0.0,
public float $c = 0.0,
) {}
}
$Account = new Account (10.90, 20.0, 30.80);
print_r($Account->a);
print_r($Account->a);
print_r($Account->a);
?>
ผลลัพธ์
10.9 20 30.8
ในโค้ดด้านบน เรารวมการกำหนดพรอเพอร์ตี้และการเติมค่าไว้ในลายเซ็นคอนสตรัคเตอร์ โค้ดนี้จะลดการซ้ำซ้อน
ตัวอย่างที่ 3: โค้ด PHP 8 สำหรับ Constructor Property Promotion
<?php
class Employee {
public function __construct(
public int $id,
public string $name,
) {}
}
$employee = new Employee(11, 'Alex');
print_r($employee->id);
print_r($employee->name);
?>
ผลลัพธ์
11 Alex