การใช้ Union Type ใน PHP 8 เราสามารถใช้ค่าตั้งแต่สองประเภทขึ้นไป แทนที่จะใช้ประเภทเดียว หากต้องการระบุหลายประเภท เส้นแนวตั้ง (|) ใช้เพื่อเข้าร่วม
ชนิดยูเนี่ยนรองรับพารามิเตอร์ ชนิดส่งคืน และคุณสมบัติ
ไวยากรณ์
type1|type2|……|type_n
ตัวอย่าง 1:ประเภทสหภาพ
<?php
class Number
{
private int | float $num;
public function getNum():
float | int
{
return $this->num
}
public function setNum(float | int):
void
{
$this->num = $num;
}
}
?> ตัวอย่าง 2:โปรแกรม PHP 8 โดยใช้ Union Type
<?php
class Number{
private int|float $number;
public function setNumber(int|float $number): void {
$this->number = $number;
}
public function getNumber(): int|float {
return $this->number;
} #passing floats or integer values to the number object
}
$number = new Number();
$number->setNumber(5);
print_r($number->getNumber());
$number->setNumber(11.54);
print_r($number->getNumber());
?> ผลลัพธ์
511.54
ประเภท Nullable ในประเภท Union
ใน PHP 7.1 จะใช้ประเภท nullable กับเครื่องหมายคำถาม ?type . ใน PHP 8 เราสามารถประกาศประเภท nullable เป็น type|null . ตัวอย่างเช่น:ลอย|int|null แต่เราไม่สามารถประกาศเป็น ?float|int .
ไวยากรณ์ประเภท Nullable
type1|type2|null
เราไม่ควรประกาศเช่น ?type1|type2 เพราะนี่จะเป็นการประกาศที่คลุมเครือ
-
การตรวจสอบข้อผิดพลาดในการคอมไพล์เวลา - ใน PHP ไม่อนุญาตให้ใช้ประเภทที่ซ้ำกันหรือซ้ำซ้อนในการประกาศประเภท การตรวจสอบนี้จะเกิดขึ้นระหว่างเวลาคอมไพล์โดยไม่ต้องโหลดคลาส/อินเทอร์เฟซอัตโนมัติ
-
ไม่อนุญาตให้ใช้ประเภทที่ซ้ำกัน − เราไม่สามารถประกาศซ้ำใน PHP เช่น int|int และยัง int|?int ไม่อนุญาต เพราะมันจะส่งกลับข้อผิดพลาดทางไวยากรณ์ "ข้อผิดพลาดร้ายแรง:ประเภทซ้ำ… ซ้ำซ้อนใน …ออนไลน์"
-
ไม่อนุญาตให้พิมพ์เป็นโมฆะ − ใน PHP 8 ประเภทยูเนี่ยน เป็นโมฆะ ไม่อนุญาตให้นำไปรวมกับประเภทอื่น
ตัวอย่าง
Function foo(): void|null{} พิมพ์ผิดใน PHP 8
ประเภทเท็จเป็นส่วนหนึ่งของประเภท Union ใน PHP 8 ส่วนใหญ่เราใช้ null เป็นค่าส่งคืนเพื่อแสดงการไม่มีค่าส่งคืนหรือข้อผิดพลาด ตัวอย่างเช่น สมมติว่าเรามีวิธีชั้นเรียนที่ค้นหานักเรียนโดยใช้รหัสนักเรียน หากไม่มี ID นักศึกษา อาจเป็นค่าว่างเพื่อแสดงว่าไม่มี ID นักศึกษา แต่ PHP ใช้ เท็จ ถ้า รหัสนักศึกษา ไม่พบ
-
ประเภทเท็จใช้สำหรับความล้มเหลวใด ๆ แทนประเภท null
-
เราไม่สามารถใช้เท็จเป็นประเภทสแตนด์อโลนและไม่อนุญาตให้ใช้ประเภทสแตนด์อโลนที่เป็นค่าว่าง นั่นหมายความว่า เราไม่สามารถใช้ false, false|null และ ?false ได้
-
เราสามารถใช้ false ได้ทุกที่ที่ยอมรับประเภท เช่น พารามิเตอร์ คุณสมบัติ และค่าที่ส่งกลับ
-
ไม่มีประเภทตามตัวอักษรจริง แต่เราใช้ได้เฉพาะประเภทบูลเท่านั้น
ตัวอย่าง
<?php
Class Student {
public function find(int $id): User|false
{
// ...
}
}
?>