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
- Fleksibilitas Tipe: Memberikan fleksibilitas pada fungsi/method untuk menerima berbagai tipe data.
- Kode Lebih Rapi: Mengurangi penggunaan logika pengecekan tipe manual.
- 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 karenavoid
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