Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

Union Type ใน PHP 8

ด้วย Union Type ใน PHP 8 เราสามารถใช้ค่าของสองประเภทหรือมากกว่า แทนที่จะใช้ประเภทเดียว เพื่อระบุหลายประเภท ใช้ เส้นแนวตั้ง (|) ในการเชื่อมต่อ

Union type รองรับพารามิเตอร์ ประเภทคืนค่า และพรอเพอร์ตี้

รูปแบบ (Syntax)

type1|type2|...|type_n

ตัวอย่างที่ 1: Union Type

<?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; 
    } 
} 
$number = new Number(); 
$number->setNumber(5); 
print_r($number->getNumber()); 
$number->setNumber(11.54); 
print_r($number->getNumber()); 
?>

ผลลัพธ์

5
11.54

Nullable Types ใน Union Type

ใน PHP 7.1 nullable type ใช้เครื่องหมายคำถาม ?type ใน PHP 8 เราสามารถประกาศ nullable types เป็น type|null เช่น float|int|null แต่ไม่สามารถประกาศเป็น ?float|int ได้

รูปแบบ Nullable Types

type1|type2|null

เราไม่ควรประกาศแบบ ?type1|type2 เพราะจะเป็นการประกาศที่คลุมเครือ

  • Compile-time error checking - ใน PHP union type ที่ซ้ำหรือซ้อนทับในการประกาศประเภทไม่ได้รับอนุญาต การตรวจสอบนี้เกิดขึ้นในขณะคอมไพล์โดยไม่ต้อง autoload คลาส/อินเตอร์เฟซ

  • Duplicate types ไม่ได้รับอนุญาต - เราไม่สามารถประกาศซ้ำใน PHP ได้ เช่น int|int และ int|?int ก็ไม่ได้ เพราะจะคืนค่า syntax error "Fatal error: Duplicate type... is redundant in ...on line."

  • void type ไม่ได้รับอนุญาต - ใน PHP 8 union type void ไม่ได้รับอนุญาตให้รวมกับประเภทอื่น

ตัวอย่าง

Function foo(): void|null{}

False Type ใน PHP 8

False type เป็นส่วนหนึ่งของ Union type ใน PHP 8 โดยส่วนใหญ่เราใช้ null เป็นค่าคืนเพื่อแสดงการขาดหายไปของค่าคืนหรือข้อผิดพลาด ตัวอย่าง: สมมติเรามีเมธอดคลาสที่หานักเรียนด้วยรหัสนักเรียน หากรหัสนักเรียนไม่มี อาจให้ null เพื่อแสดงว่ารหัสนักเรียนไม่ได้อยู่ แต่ PHP ใช้ false หาก Student ID ไม่พบ

  • False type ใช้สำหรับความล้มเหลวแทน null type

  • เราไม่สามารถใช้ false เป็น standalone type และ standalone nullable types ก็ไม่ได้รับอนุญาต นั่นคือ เราไม่สามารถใช้ false, false|null, และ ?false ได้

  • เราสามารถใช้ false ได้ทุกที่ที่ยอมรับประเภท เช่น พารามิเตอร์ พรอเพอร์ตี้ และค่าคืน

  • ไม่มี true literal type แทนที่จะใช้ bool type เท่านั้น

ตัวอย่าง

<?php 
Class Student { 
    public function find(int $id): User|false 
    { 
        // ... 
    } 
} ?>