การใช้ 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 { // ... } } ?>