Programmer

Fitur Baru PHP 8.4: Property Hooks & Array Helpers Baru

–

Fitur Baru PHP 8.4: Property Hooks & Array Helpers Baru

PHP 8.4 membawa sejumlah pembaruan yang menarik bagi developer, terutama dalam cara menulis kode yang lebih ringkas dan mudah dikelola. Salah satu perubahan terbesar adalah hadirnya Property Hooks, yang memungkinkan developer menentukan perilaku saat sebuah property dibaca atau diubah tanpa harus membuat getter dan setter secara terpisah.

Selain Property Hooks, PHP 8.4 juga memperkenalkan beberapa array helpers baru seperti array_find(), array_find_key(), array_any(), dan array_all(). Fungsi-fungsi tersebut membuat operasi pencarian dan pengecekan data dalam array menjadi lebih sederhana dibandingkan pendekatan lama menggunakan kombinasi foreach() atau fungsi array lainnya.

Apa yang Baru di PHP 8.4?

PHP 8.4 merupakan salah satu versi PHP yang membawa perubahan cukup signifikan pada fitur bahasa. Pembaruan ini tidak hanya berisi peningkatan performa, tetapi juga memperkenalkan sintaks baru yang dapat membantu developer menulis kode dengan lebih sederhana.

Beberapa fitur yang menarik perhatian dalam PHP 8.4 antara lain:

  • Property Hooks.
  • Constructor Property Promotion yang lebih fleksibel.
  • Fungsi array_find().
  • Fungsi array_find_key().
  • Fungsi array_any().
  • Fungsi array_all().
  • Peningkatan pada class dan object.
  • Perubahan serta peningkatan pada ekstensi bawaan PHP.

Dari berbagai pembaruan tersebut, Property Hooks dan array helpers menjadi bagian yang cukup relevan untuk developer yang sering bekerja dengan object dan manipulasi array.

Apa Itu Property Hooks di PHP 8.4?

Property Hooks memungkinkan developer memberikan logika khusus ketika sebuah property diakses atau diubah.

Sebelum PHP 8.4, developer biasanya menggunakan getter dan setter untuk memberikan kontrol terhadap property.

Contohnya:

class User
{
    private string $name;

    public function getName(): string
    {
        return $this->name;
    }

    public function setName(string $name): void
    {
        $this->name = trim($name);
    }
}

Pendekatan tersebut masih dapat digunakan, tetapi membutuhkan method tambahan untuk setiap property yang ingin dikontrol.

PHP 8.4 menawarkan sintaks Property Hooks yang lebih ringkas.

Contohnya:

class User
{
    public string $name {
        set => trim($value);
    }
}

Ketika nilai name diberikan, hook set akan dijalankan.

$user = new User();

$user->name = "  Budi  ";

echo $user->name;

Nilai yang tersimpan akan diproses melalui hook sebelum digunakan.

Property Hook get

Property Hooks dapat digunakan untuk mengatur perilaku ketika property dibaca.

Contoh:

class Product
{
    public float $price;

    public string $formattedPrice {
        get => "Rp " . number_format($this->price, 0, ',', '.');
    }
}

Property formattedPrice tidak perlu disimpan sebagai property terpisah. Nilainya dapat dihitung ketika property tersebut dibaca.

$product = new Product();

$product->price = 150000;

echo $product->formattedPrice;

Pendekatan ini berguna ketika sebuah nilai merupakan hasil dari property lain.

Property Hook set

Hook set digunakan ketika sebuah property mendapatkan nilai baru.

Misalnya:

class User
{
    public string $username {
        set => strtolower(trim($value));
    }
}

Kemudian:

$user = new User();

$user->username = " BUDI ";

echo $user->username;

Nilai property akan diproses terlebih dahulu sehingga hasil akhirnya menjadi lebih konsisten.

Property Hooks seperti ini dapat membantu ketika developer membutuhkan validasi sederhana, normalisasi data, atau transformasi nilai sebelum disimpan.

Property Hooks vs Getter dan Setter

Pada PHP versi sebelumnya, pola getter dan setter sering digunakan untuk memberikan kontrol terhadap property.

Contohnya:

class Product
{
    private float $price;

    public function getPrice(): float
    {
        return $this->price;
    }

    public function setPrice(float $price): void
    {
        $this->price = $price;
    }
}

Dengan Property Hooks, struktur tersebut dapat dibuat lebih ringkas:

class Product
{
    public float $price {
        set => max(0, $value);
    }
}

Perbedaan utamanya bukan berarti getter dan setter menjadi tidak diperlukan. Method tetap dapat digunakan ketika sebuah operasi membutuhkan perilaku yang lebih kompleks atau bukan sekadar akses property.

Property Hooks lebih cocok untuk logika yang secara langsung berkaitan dengan pembacaan atau perubahan sebuah property.

Array Helpers Baru di PHP 8.4

Selain Property Hooks, PHP 8.4 memperkenalkan empat fungsi baru yang berkaitan dengan array:

  • array_find()
  • array_find_key()
  • array_any()
  • array_all()

Fungsi-fungsi tersebut menggunakan callback untuk menentukan apakah sebuah elemen memenuhi kondisi tertentu.

Sebelumnya, kebutuhan seperti ini sering ditangani menggunakan foreach() atau kombinasi fungsi array lainnya.

1. array_find()

array_find() digunakan untuk menemukan nilai elemen pertama yang memenuhi kondisi callback.

Contoh:

$numbers = [5, 10, 15, 20, 25];

$result = array_find(
    $numbers,
    fn($number) => $number > 15
);

echo $result;

Hasilnya:

20

PHP akan memeriksa elemen array sampai menemukan nilai pertama yang memenuhi kondisi.

Jika tidak ada elemen yang cocok, array_find() akan menghasilkan null.

Contoh:

$result = array_find(
    $numbers,
    fn($number) => $number > 100
);

var_dump($result);

Hasilnya:

NULL

Fungsi ini dapat membuat kode pencarian data menjadi lebih mudah dibaca dibandingkan membuat loop secara manual.

2. array_find_key()

Jika array_find() mengembalikan nilai elemen, array_find_key() mengembalikan key dari elemen pertama yang memenuhi kondisi.

Contohnya:

$users = [
    10 => 'Andi',
    20 => 'Budi',
    30 => 'Citra'
];

$key = array_find_key(
    $users,
    fn($user) => $user === 'Budi'
);

echo $key;

Hasilnya:

20

Fungsi ini dapat digunakan ketika developer tidak hanya membutuhkan nilai, tetapi juga posisi atau key dari data yang ditemukan.

Jika tidak ada elemen yang cocok, hasilnya adalah null.

3. array_any()

array_any() digunakan untuk mengecek apakah setidaknya ada satu elemen yang memenuhi kondisi tertentu.

Contoh:

$numbers = [2, 4, 6, 7, 8];

$hasOddNumber = array_any(
    $numbers,
    fn($number) => $number % 2 !== 0
);

var_dump($hasOddNumber);

Hasil:

bool(true)

Karena terdapat angka 7 yang memenuhi kondisi.

Fungsi ini dapat membuat kode pengecekan menjadi lebih ekspresif.

Misalnya dalam aplikasi, developer dapat menggunakannya untuk mengecek apakah terdapat produk tertentu, pengguna dengan status tertentu, atau data yang memenuhi sebuah kondisi.

4. array_all()

Berbeda dengan array_any(), array_all() digunakan untuk memastikan semua elemen memenuhi kondisi yang diberikan.

Contoh:

$numbers = [2, 4, 6, 8];

$allEven = array_all(
    $numbers,
    fn($number) => $number % 2 === 0
);

var_dump($allEven);

Hasil:

bool(true)

Jika salah satu elemen tidak memenuhi kondisi, hasilnya akan menjadi false.

Contohnya:

$numbers = [2, 4, 6, 9];

$allEven = array_all(
    $numbers,
    fn($number) => $number % 2 === 0
);

var_dump($allEven);

Hasil:

bool(false)

Perbandingan Array Helpers Baru

Keempat fungsi tersebut memiliki tujuan yang berbeda.

FungsiKegunaan
array_find()Mencari nilai elemen pertama yang cocok
array_find_key()Mencari key elemen pertama yang cocok
array_any()Mengecek apakah ada elemen yang cocok
array_all()Mengecek apakah semua elemen cocok

Dengan fungsi tersebut, operasi terhadap array dapat ditulis lebih deklaratif karena tujuan kode dapat terlihat langsung dari nama fungsinya.

Contoh Penggunaan pada Data Produk

Misalnya sebuah aplikasi memiliki daftar produk:

$products = [
    ['name' => 'Laptop', 'stock' => 5],
    ['name' => 'Mouse', 'stock' => 0],
    ['name' => 'Keyboard', 'stock' => 10],
];

Untuk mencari produk pertama yang masih memiliki stok:

$product = array_find(
    $products,
    fn($product) => $product['stock'] > 0
);

Hasilnya adalah produk pertama yang memenuhi kondisi tersebut.

Sementara itu, array_any() dapat digunakan untuk mengetahui apakah terdapat produk yang stoknya habis:

$hasOutOfStock = array_any(
    $products,
    fn($product) => $product['stock'] === 0
);

Kode tersebut menghasilkan nilai boolean.

Kenapa Array Helpers PHP 8.4 Menarik?

Sebelum adanya fungsi-fungsi tersebut, developer dapat menggunakan beberapa pendekatan berbeda untuk mendapatkan hasil yang sama.

Misalnya dengan foreach():

$result = null;

foreach ($numbers as $number) {
    if ($number > 15) {
        $result = $number;
        break;
    }
}

Dengan array_find(), tujuan kode menjadi lebih langsung:

$result = array_find(
    $numbers,
    fn($number) => $number > 15
);

Kode yang lebih ringkas bukan selalu berarti lebih baik dalam semua kondisi, tetapi fungsi khusus seperti ini dapat membuat maksud sebuah operasi lebih mudah dikenali ketika membaca source code.

Apakah PHP 8.4 Menggantikan Getter dan Setter?

Tidak. Property Hooks bukan berarti getter dan setter tradisional harus dihapus dari seluruh aplikasi PHP.

Property Hooks memberikan alternatif ketika logika yang dibutuhkan memang berkaitan langsung dengan akses atau perubahan property.

Getter dan setter tetap dapat digunakan untuk kebutuhan yang lebih kompleks, terutama ketika sebuah operasi membutuhkan proses tambahan, side effect, atau API method yang memang sengaja dibuat terpisah dari property.

Karena itu, migrasi ke PHP 8.4 sebaiknya tidak dilakukan dengan sekadar mengganti seluruh getter dan setter menjadi Property Hooks.

Hal yang Perlu Diperhatikan Saat Migrasi ke PHP 8.4

Sebelum menggunakan fitur PHP 8.4 pada project production, pastikan environment server sudah menggunakan versi PHP yang kompatibel.

Developer juga perlu memperhatikan beberapa hal berikut:

  1. Periksa versi PHP pada server agar fitur PHP 8.4 dapat digunakan.
  2. Uji aplikasi di staging sebelum melakukan upgrade production.
  3. Periksa kompatibilitas framework dan library yang digunakan.
  4. Jalankan automated test jika project memiliki test suite.
  5. Periksa kode lama yang mungkin memiliki perilaku berbeda setelah upgrade.
  6. Gunakan Property Hooks secara selektif sesuai kebutuhan project.
  7. Uji fungsi array baru sebelum digunakan pada kode yang harus kompatibel dengan versi PHP sebelumnya.

Jika sebuah project masih harus berjalan pada PHP versi lama, penggunaan fitur baru PHP 8.4 juga perlu dipertimbangkan karena syntax dan fungsi tersebut tidak tersedia pada versi PHP yang lebih rendah.

PHP 8.4 Cocok untuk Project Seperti Apa?

Fitur PHP 8.4 dapat dimanfaatkan pada berbagai jenis aplikasi, mulai dari website sederhana hingga aplikasi web yang lebih kompleks.

Property Hooks dapat membantu project yang memiliki banyak object dan property dengan kebutuhan transformasi atau validasi nilai. Sementara itu, array helpers dapat membantu kode yang sering melakukan pencarian dan pengecekan terhadap kumpulan data.

Framework dan library yang digunakan juga tetap menjadi pertimbangan penting. Upgrade versi PHP sebaiknya dilakukan setelah memastikan seluruh komponen utama aplikasi mendukung versi tersebut.

Contoh Kombinasi Property Hooks dan Array Helpers

Kedua fitur baru tersebut juga dapat digunakan dalam satu project.

Misalnya sebuah class memiliki daftar produk dan property untuk mendapatkan produk yang tersedia:

class Store
{
    public array $products = [];

    public ?array $availableProduct {
        get => array_find(
            $this->products,
            fn($product) => $product['stock'] > 0
        );
    }
}

Dengan pendekatan tersebut, property availableProduct dapat langsung mencari produk yang memiliki stok ketika property dibaca.

Contoh penggunaannya:

$store = new Store();

$store->products = [
    ['name' => 'Laptop', 'stock' => 0],
    ['name' => 'Mouse', 'stock' => 5],
];

$product = $store->availableProduct;

Kode seperti ini menunjukkan bagaimana Property Hooks dan array helpers PHP 8.4 dapat digunakan bersama untuk membuat struktur kode yang lebih deklaratif.

Cara Mulai Menggunakan Fitur PHP 8.4

Jika ingin mencoba fitur-fitur tersebut, pastikan environment development sudah menggunakan PHP 8.4 atau versi yang lebih baru.

Setelah itu, developer dapat mulai dari fitur yang paling sederhana seperti array helpers:

$result = array_find(
    $items,
    fn($item) => $item['status'] === 'active'
);

Kemudian Property Hooks dapat diterapkan pada class yang memang membutuhkan perilaku khusus saat property dibaca atau diubah.

Pendekatan bertahap seperti ini dapat membantu developer memahami perubahan PHP 8.4 tanpa harus langsung melakukan refactor besar pada seluruh aplikasi.

Facebook
Twitter
LinkedIn