Belajar PHP - PHP 8.5 & Fitur Terbaru
Series/Belajar PHP/Episode 16
Episode 16 of 23

Belajar PHP - PHP 8.5 & Fitur Terbaru

Mengenal PHP 8.5 (rilis November 2025): pipe operator, extension URI, Clone With, atribut NoDiscard, array_first dan array_last, serta penyempurnaan CLI, plus rekap fitur 8.3-8.4 seperti property hooks dan typed class constants, hingga arah pengembangan PHP 8.6.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Kita telah menulis PHP 8.x sepanjang series ini. Episode 16 memfokuskan pada PHP 8.5 — rilis stabil terbaru yang dirilis 20 November 2025 (patch terkini 8.5.9, 30 Juli 2026) — dan fitur-fitur yang datang dari versi 8.3 hingga 8.4. Ini penting karena kalian akan membaca kode orang lain yang sudah memakai fitur ini, dan rekrutmen pun sering bertanya "fitur PHP modern apa yang kalian pakai?"

Mengapa penting? Bahasa terus berevolusi. PHP 8.5 tidak mengubah cara kalian menulis aplikasi secara fundamental, tetapi menawarkan ergonomi yang lebih baik: kode yang lebih pendek untuk pola yang sering muncul, keamanan ekstra lewat atribut, dan ekstensi baru. Memahami fitur modern membuat kalian menulis kode yang ringkas sekaligus mengikuti arah komunitas.

Pipe Operator |>

Fitur andalan PHP 8.5 adalah pipe operator — meneruskan hasil ekspresi kiri sebagai argumen pertama ekspresi kanan:

Pipe operator (PHP 8.5)
<?php
declare(strict_types=1);
 
$harga = 45000;
 
// PHP 8.5: hasil kiri diteruskan sebagai argumen pertama kanan
$total = $harga
    |> fn (int $h): int => $h + (int) ($h * 0.11)   // tambah pajak
    |> fn (int $h): int => max($h, 10000);           // terapkan minimal
 
echo $total, "\n";  // 49950
 
// gaya lama: bersarang dan urutan baca terbalik
$totalLama = max(
    fn ($h) => $h + (int) ($h * 0.11)
    ($harga),
    10000
);

Dengan pipe operator, alur data dibaca kiri ke kanan: harga → tambah pajak → pastikan minimal. Bandingkan dengan gaya lama yang bersarang dari dalam — urutan transformasi lebih sulit diikuti. Fitur ini murni ergonomi: tidak mengubah cara kerja bahasa, hanya membuat pipeline data lebih terbaca.

Note

Pipe operator mirip dengan |> di Elixir/F#. Untuk mendukungnya, contoh kode di episode ini wajib PHP 8.5 — inilah mengapa di episode 0 kita menekankan versi minimal 8.5. Fitur lain di episode 16 tetap kompatibel ke 8.4 ke bawah.

Extension URI

PHP 8.5 menghadirkan extension URI — ekstensi parser URI yang mengikuti RFC 3986 dengan dukungan properti tambahan seperti scheme, user, pass, host, port, path, query, dan fragment secara terstruktur:

Extension URI (PHP 8.5)
$uri = Uri::parse("https://user:pass@api.example.com:8443/path?q=php#bagian");
 
echo $uri->scheme, "\n";   // https
echo $uri->host, "\n";     // api.example.com
echo $uri->port, "\n";     // 8443
echo $uri->query, "\n";    // q=php

Ini alternatif modern yang lebih kaya dibanding parse_url() untuk kebutuhan manipulasi URI secara lengkap — berguna saat membangun URL absolut di templating (episode 15) atau memvalidasi redirect URL agar tidak menjadi open redirect (episode 17).

Clone With

Untuk object immutable, clone biasa tidak bisa mengubah properti readonly. PHP 8.5 menambahkan Clone With:

Clone With (PHP 8.5)
class Alamat
{
    public function __construct(
        public readonly string $kota,
        public readonly string $kodePos,
    ) {}
}
 
$jakarta = new Alamat("Jakarta", "10110");
 
// menyalin object tetapi mengganti satu properti
$bandung = $jakarta->cloneWith(kota: "Bandung");
 
echo $bandung->kota, " ", $bandung->kodePos, "\n";

Ini melengkapi pola DTO immutable (episode 21): alih-alih mutasi, kita menghasilkan object baru dengan sebagian nilai diubah — aman dibagikan antar komponen tanpa efek samping.

Atribut #[NoDiscard]

Atribut #[NoDiscard] (PHP 8.5) memperingatkan bila return value sebuah fungsi/objek tidak dipakai:

NoDiscard (PHP 8.5)
class Client
{
    #[NoDiscard]
    public function save(): bool
    {
        // melakukan penyimpanan, mengembalikan status
        return true;
    }
}
 
$client->save();   // ⚠️ warning: hasil save() diabaikan
 
if ($client->save()) {   // ✅ benar
    echo "Tersimpan\n";
}

Atribut ini menangkap bug tersembunyi — fungsi yang harus dicek hasilnya (misal operasi penyimpanan, update, atau operasi dengan efek samping) tidak lagi bisa diabaikan diam-diam.

array_first() dan array_last()

Dua fungsi kecil yang sangat sering dibutuhkan namun selama ini harus reset()/end() atau array[0]:

array_first & array_last (PHP 8.5)
$produk = ["laptop", "monitor", "keyboard"];
 
$pertama = array_first($produk);   // "laptop"
$terakhir = array_last($produk);   // "keyboard"
 
$kosong = [];
array_first($kosong);              // null

Keduanya menerima argumen opsional callback dan default, sekaligus tidak mengubah pointer internal array (yang menjadi jebakan reset()/end()). Melengkapi array_find() (8.4) dan array_any()/array_all() (8.4).

Penyempurnaan CLI

PHP 8.5 merapikan pengalaman command-line:

  • Perintah php -v dan tooling terkait menampilkan info lebih jelas.
  • Perilaku php -S (built-in server) yang lebih stabil untuk development.
  • Peningkatan pada internal server dan penanganan signal — fondasi untuk skrip panjang (episode 20).

Rekap PHP 8.4 dan 8.3

VersiFitur andalanContoh
8.4 (Nov 2024)Property hooks, asymmetric visibilitypublic string $nama { get; set; }
8.4Fungsi array baruarray_find(), array_any(), array_all()
8.4Atribut #[Deprecated]menandai API usang
8.3 (Nov 2023)Typed class constantspublic const string VERSION = "1.0";
8.3Atribut #[Override]memastikan method menimpa parent
Property hooks (PHP 8.4)
class Product
{
    public float $harga {
        get => $this->harga;
        set => $this->harga = $value < 0 ? 0 : $value;
    }
}
Override attribute (PHP 8.3)
class EmailNotifier extends Notifier
{
    #[Override]
    public function kirim(string $pesan): void
    {
        // dipastikan menimpa metode parent
    }
}

PHP 8.6 dan Arah Bahasa

PHP 8.6 sedang dalam pengembangan dan dijadwalkan rilis sekitar November 2026 (melanjutkan irama tahunan: 8.3, 8.4, 8.5 → 8.6). Siklus dukungan saat ini:

VersiStatus (Agustus 2026)
8.5 (8.5.9)Active support — hingga 31 Des 2027
8.5 (keamanan)Hingga 31 Des 2029
8.4Active support — hingga Des 2026
8.3Security-only — hingga Des 2027
8.2EOL 31 Des 2026

Warning

Aturan praktis: gunakan versi dengan active support (8.5 atau 8.4 di 2026). Jangan memulai proyek baru di versi yang sudah masuk fase security-only atau EOL — pembaruan keamanan yang terlewat adalah risiko yang tidak perlu (tema episode 17 dan 19).

Common Pitfalls

  • Memakai fitur 8.5 di server PHP 8.3 — pipe operator menghasilkan parse error; cek php -v di target.
  • array_first() pada array dengan kunci tidak berurutan — ia mengambil elemen urutan pertama, bukan kunci 0; baca dokumentasi untuk kasus map.
  • Clone With pada object dengan properti non-readonly — untuk property mutable gunakan clone biasa dengan assignment.
  • #[NoDiscard] berlebihan — beri hanya pada fungsi yang hasilnya memang wajib dicek; terlalu banyak memicu warning palsu.

Penutup

Inti yang harus dibawa pulang:

  • PHP 8.5 (Nov 2025): pipe operator |>, extension URI, Clone With, #[NoDiscard], array_first()/array_last(), perbaikan CLI.
  • PHP 8.4: property hooks, asymmetric visibility, array_find(), #[Deprecated].
  • PHP 8.3: typed class constants, #[Override].
  • PHP 8.6 dijadwalkan akhir 2026 — irama rilis tahunan terus berlanjut; selalu pakai versi dengan active support.

Di episode 17 selanjutnya kita menutup semua lubang yang selama ini kita sebut-sebut: Keamanan Web (OWASP) — SQL Injection, XSS, CSRF, File Upload, dan SSRF, lengkap dengan mitigasi nyata untuk masing-masing. Ini episode yang menentukan apakah aplikasi kalian bertahan atau jebol di dunia nyata.

Belajar PHP - PHP 8.5 & Fitur Terbaru | Belajar PHP