Cara Menggunakan Union Types di PHP 8

Cara Menggunakan Union Types di PHP 8

Union Types adalah salah satu fitur baru yang diperkenalkan di PHP 8. Fitur ini memungkinkan Anda untuk mendeklarasikan beberapa tipe data yang diizinkan untuk sebuah parameter, return value, atau properti kelas. Dengan Union Types, kode Anda menjadi lebih fleksibel sekaligus tetap menjaga tipe yang valid.

Apa Itu Union Types?

Union Types memungkinkan Anda mendefinisikan lebih dari satu tipe data yang bisa diterima oleh sebuah variabel, parameter, atau return value dengan menggunakan tanda pemisah | (pipe).

Manfaat Union Types

  1. Fleksibilitas Tipe: Memberikan fleksibilitas pada fungsi/method untuk menerima berbagai tipe data.
  2. Kode Lebih Rapi: Mengurangi penggunaan logika pengecekan tipe manual.
  3. Validasi Tipe Otomatis: PHP akan langsung memeriksa tipe data yang digunakan.

Contoh Penggunaan Union Types

Pada Parameter Fungsi

function setValue(int|float $value): void {
    echo "Value is: $value\n";
}

setValue(42);   // Valid
setValue(3.14); // Valid
// setValue("42"); // Error: TypeError

Pada Return Value

function calculate(bool $asInteger): int|float {
    return $asInteger ? 42 : 42.42;
}

echo calculate(true);  // 42
echo calculate(false); // 42.42

Pada Properti Kelas

class Product {
    public int|float|null $price; // Bisa integer, float, atau null
}

$product = new Product();
$product->price = 100;     // Valid
$product->price = 99.99;   // Valid
$product->price = null;    // Valid
// $product->price = "100"; // Error: TypeError

Union Types dengan null

Union Types mendukung tipe nullable secara eksplisit tanpa perlu menggunakan sintaks ?.

Sebelum PHP 8 (Menggunakan ? untuk Nullable)

function getPrice(): ?float {
    return null;
}

Dengan Union Types di PHP 8

function getPrice(): float|null {
    return null;
}

Menggabungkan Class Types

Anda juga bisa menggunakan nama kelas dalam Union Types:

class Cat {
    public function meow() {
        echo "Meow!";
    }
}

class Dog {
    public function bark() {
        echo "Bark!";
    }
}

function makeSound(Cat|Dog $animal): void {
    if ($animal instanceof Cat) {
        $animal->meow();
    } elseif ($animal instanceof Dog) {
        $animal->bark();
    }
}

$cat = new Cat();
$dog = new Dog();

makeSound($cat); // Output: Meow!
makeSound($dog); // Output: Bark!

Union Types vs PHPDoc

Sebelum PHP 8, tipe gabungan biasanya didefinisikan menggunakan komentar PHPDoc:

Sebelum PHP 8 (Dengan PHPDoc)

/**
 * @param int|float $value
 */
function setValue($value): void {
    echo "Value is: $value\n";
}

Setelah PHP 8 (Native Union Types)

function setValue(int|float $value): void {
    echo "Value is: $value\n";
}

Keuntungan Union Types:

  • Validasi tipe dilakukan langsung oleh PHP, bukan hanya dokumentasi.
  • Mengurangi potensi bug karena tipe data yang salah.

Batasan Union Types

  • Tidak Mendukung Void Bersama Tipe Lain
    void tidak dapat digabungkan dengan tipe lain karena void menunjukkan ketiadaan nilai:
// Tidak valid:
function test(): int|void {}
  • Tidak Mendukung Mixed dengan Tipe Lain
    mixed sudah mencakup semua tipe, sehingga tidak boleh digabungkan:
// Tidak valid:
function test(): int|mixed {}
  • Dukungan Tipe Referensi (Resource)
    resource tidak didukung secara eksplisit dalam Union Types.

Kesimpulan

Union Types di PHP 8:

  • Membuat kode lebih fleksibel dan aman dengan mendukung banyak tipe data.
  • Menggantikan kebutuhan komentar PHPDoc untuk validasi tipe gabungan.
  • Sangat cocok untuk fungsi yang bekerja dengan berbagai tipe data.

Gunakan Union Types untuk meningkatkan kualitas, kejelasan, dan fleksibilitas kode Anda. 🚀

Leave a Reply

Your email address will not be published. Required fields are marked *