2 poin oleh GN⁺ 2025-11-21 | 1 komentar | Bagikan ke WhatsApp
  • PHP 8.5 adalah versi pembaruan besar yang mencakup berbagai fitur seperti operator pipe, clone with, dan parser URI baru
  • Operator pipe menyederhanakan rantai pemanggilan fungsi sehingga meningkatkan keterbacaan dan kemudahan pemeliharaan
  • Fitur clone with memungkinkan perubahan nilai properti sekaligus saat menyalin objek, dengan beberapa batasan pada properti readonly
  • Fitur kenyamanan untuk pengembang diperkuat melalui #[NoDiscard], cast (void), dukungan ekspresi konstan untuk closure, dan output backtrace untuk fatal error
  • Versi ini juga mencakup perbaikan detail seperti pemrosesan array, validasi atribut, penghentian cast nonstandar, serta perubahan terkait kompatibilitas mundur

Fitur baru utama

  • Dengan diperkenalkannya operator pipe (|>), kini dimungkinkan menulis kode bergaya chaining yang langsung meneruskan hasil suatu fungsi ke fungsi berikutnya

    • Mendukung struktur transformasi data bertahap alih-alih pemanggilan fungsi bertingkat
    • Pada contoh kode, trim, str_replace, strtolower, dan lainnya dihubungkan secara berurutan
  • Melalui fitur clone with, nilai properti dapat diubah sekaligus saat menyalin objek

    • Pada kelas contoh Book, digunakan dalam bentuk clone($this, ['title' => $title])
    • Namun, saat menyalin properti readonly dari luar, diperlukan penentu akses public(set)
  • Penambahan atribut #[NoDiscard] dan cast (void)

    • Dapat menandai fungsi yang akan memunculkan peringatan bila nilai kembalian diabaikan
    • Peringatan dapat ditekan dengan menggunakan cast (void)
  • Melalui peningkatan pada closure, kini closure dan first-class callable dapat digunakan dalam ekspresi konstan

    • Pada contoh, didefinisikan di dalam atribut dalam bentuk #[SkipDiscovery(static function (...))]
    • Closure seperti ini wajib dideklarasikan sebagai static dan tidak dapat mengakses variabel eksternal
  • Penambahan fitur output backtrace untuk fatal error

    • Informasi stack trace yang sebelumnya tidak ditampilkan kini disertakan dalam pesan error sehingga debugging menjadi lebih mudah

Fitur terkait array dan URI

  • Penambahan fungsi array_first() dan array_last()

    • Mengembalikan elemen pertama dan terakhir dari array dengan sederhana
    • Menggantikan pendekatan lama yang lebih rumit dengan array_key_first() dan array_key_last()
  • Penambahan parser URI baru

    • Menyediakan metode seperti getHost(), getScheme(), getPort(), dan lainnya melalui kelas Uri\Rfc3986\Uri
    • Menyederhanakan manipulasi dan analisis URI

Fitur terkait atribut dan validasi

  • Diperkenalkannya atribut #[DelayedTargetValidation]
    • Memungkinkan penundaan waktu validasi untuk beberapa atribut seperti #[Override] dari waktu kompilasi ke runtime
    • Bertujuan mengurangi masalah kompatibilitas mundur

Perubahan kecil lainnya

  • Dukungan untuk asymmetric visibility pada properti statis
  • Kini atribut juga dapat diberikan pada konstanta di luar kelas
  • Property promotion pada konstruktor kini juga dapat diterapkan pada properti final
  • Atribut #[\Override] kini juga dapat diterapkan pada properti
  • Penambahan properti Dom\Element::$outerHTML
  • Ekstensi Exif kini mendukung gambar HEIF/HEIC
  • Penambahan flag FILTER_THROW_ON_FAILURE saat memanggil filter_var()

Penghentian dan perubahan tidak kompatibel

  • Penggunaan nama cast nonstandar seperti (boolean) dan (integer) dihentikan
  • Penggunaan backtick (``` ) sebagai alias shell_exec() dihentikan
  • Fitur deklarasi ulang konstanta dihentikan
  • Pengaturan ini disabled_classes dihapus
  • Daftar lengkap perubahan dan penghentian dapat dilihat di dokumen upgrade PHP 8.5

Ringkasan keseluruhan

  • PHP 8.5 adalah versi yang meningkatkan pengalaman pengembangan secara menyeluruh, termasuk keterbacaan kode, debugging, pemrosesan atribut, dan manipulasi array
  • Operator pipe dan parser URI memberi dampak langsung pada penyederhanaan kode di lingkungan kerja nyata
  • Penundaan validasi atribut, fungsi array baru, dan output backtrace adalah perubahan yang meningkatkan kemudahan pemeliharaan dan stabilitas
  • Diperlukan penyesuaian kode karena beberapa sintaks nonstandar dan pengaturan lama dihentikan
  • Secara keseluruhan, ini adalah rilis yang berfokus pada penguatan konsistensi bahasa dan peningkatan kenyamanan bagi pengembang

1 komentar

 
GN⁺ 2025-11-21
Komentar Hacker News
  • Saya masih mencintai PHP
    Saya membuat perangkat lunak kriptografi untuk PHP 23 tahun lalu, dan sampai sekarang masih berfungsi dengan baik
    Saya juga masih mengelola newsletter PHP, dan komunitasnya tetap kuat
    Saya juga memakai Python dan Node.js, tetapi untuk pekerjaan yang cepat dan sederhana, pada akhirnya saya kembali ke PHP
    Namun, sejak PHP 5, bahasa ini menjadi jauh lebih kompleks, dan itu terasa seperti pedang bermata dua

    • Saya rasa PHP adalah contoh representatif dari transisi skala besar yang dilakukan dengan benar
      Saat Python beralih dari 2 ke 3, PHP berkembang dari 5.2→5.3 dan 5.6→7.0
      Namespace, autoloading PSR0, dan perbaikan parser sangat meningkatkan kecepatan dan struktur
      Setiap pembaruan membawa perbaikan bertahap tanpa merusak kompatibilitas, serta menyediakan peringatan dan shim agar versi lama tetap bisa dipertahankan
      Pembatalan PHP 6 disebabkan perubahan pemrosesan string, dan menurut saya itu pada akhirnya adalah keputusan yang bijak
      Ini adalah proyek yang menghormati bahasa dan komunitas yang telah lama menjadi sumber penghidupan banyak orang
    • Banyak yang bilang PHP menjadi rumit, tetapi kode sederhana yang saya buat di 5.3 masih berjalan sempurna di PHP 8
      Kita bisa menulisnya dengan rumit, tetapi tidak harus begitu
    • Saya penasaran apakah perangkat lunak kriptografi itu adalah Zend
      Saya pernah memakai tool terkait Zend di pertengahan 2000-an, dan saya ingat itu cukup merepotkan
    • PHP 8 cukup mudah dipahami jika dipelajari dengan cara yang benar sejak awal
      Dengan memahami PSR serta mempertimbangkan keamanan dan fitur, sekarang ini PHP menjadi bahasa yang jauh lebih stabil dan kuat
  • Evolusi PHP setelah PHP 5 memang mengesankan, tetapi seiring itu ada juga masalah kompleksitas yang meningkat
    Bagi orang yang belajar dari versi lama, codebase modern terasa asing dan sulit diikuti
    Ini adalah kekuatan bagi komunitas, tetapi menjadi hambatan bagi developer yang ingin kembali

    • Saya rasa PHP modern tetap merupakan bahasa yang mudah dibaca
      Saya memakai C++ selama 10 tahun, tetapi sekarang PHP jauh lebih mudah dibaca daripada kode C++ modern
    • Cukup belajar PHP 8. PHP sekarang jauh lebih baik daripada dulu
    • Belakangan ini sebagian besar perangkat lunak mengalami masalah serupa
      Rasanya tujuan kesederhanaan menghilang, dan yang terus bertambah hanya fitur
    • Sebenarnya perubahan seperti ini juga terjadi pada bahasa lain
      Bidang web berubah sangat cepat, jadi kalau tidak mengikuti akan tertinggal
    • Saya bekerja sebagai spesialis Java, dan saya juga sering harus menjelaskan fitur baru kepada rekan kerja
      PHP khususnya adalah bahasa yang sering dipakai pemula saat membuat situs web pertama mereka, jadi perubahan mungkin terasa lebih besar dibanding bahasa lain
  • Banyak orang cenderung merasa malu memakai PHP, tetapi saya tidak
    Saya tidak terlalu paham bahasanya, tetapi saya tahu ada banyak proyek keren yang dibuat dengannya
    Proyek PHP favorit saya belakangan ini adalah BookStack, yang saya pakai sebagai wiki keluarga
    Masih ada banyak situs yang dibangun dengan stack PHP yang terawat baik

    • PHP modern adalah bahasa yang cepat dan hebat
      Saya memakai PHP production pada 2021~2023, dan masalahnya bukan pada bahasanya melainkan pada codebase lama dan tingkat gaji yang rendah
      Ada banyak legacy code dari era PHP 4, dan pola akses datanya juga beragam, sehingga sulit dirawat
      Tetapi saat migrasi ke PHP 8, kualitas kode meningkat drastis
      Jika saya memulai proyek baru, saya mungkin tidak akan memilih PHP, tetapi untuk proyek Laravel modern saya akan dengan senang hati ikut terlibat
    • PHP adalah bahasa yang intuitif dan menyenangkan untuk digunakan
      Namun pemula mudah memakainya tanpa memahami konsep keamanan, sehingga banyak muncul masalah seperti SQL injection, dan dari situlah reputasi sebagai ‘bahasa yang tidak aman’ berasal
    • Saya lebih memilih backend PHP daripada JS/TS + framework modern
      Dengan framework seperti Laravel, lingkungannya jauh lebih stabil dan matang
    • Saya membangun karier dengan PHP, dan sampai sekarang saya masih menikmati proses modernisasinya
      Seperti bermain gitar atau menulis puisi, semua orang bisa mencobanya, tetapi melakukannya dengan baik itu sulit
    • Saya suka AzuraCast
      Menyenangkan bisa belajar langsung dari kodenya dan self-hosting server radio/musik
  • PHP telah menjadi bahasa yang makin kompleks setiap kali diperbarui
    Ini masih bahasa yang berfokus pada web, jadi saya bertanya-tanya kenapa perkembangannya jadi seperti ini

    • C# dan Java juga menjadi kompleks karena berfokus pada backend web
      Pada akhirnya, bahasa berorientasi objek tradisional tampaknya berkumpul ke arah yang serupa
    • Web sendiri semakin tidak sederhana
    • Ada juga proyek seperti NativePhp
      Bahkan jika itu bahasa khusus web, tetap ada banyak alasan untuk terus berkembang. Meningkatkan pengalaman developer selalu bernilai
    • Awalnya saya mengkritik tanpa membaca artikelnya, tetapi setelah melihat lagi, beberapa fiturnya ternyata lumayan
      array_first(), array_last() memang berguna, tetapi operator pipe bisa merusak maintainability
      Karena hanya mendukung fungsi unary, pada fungsi yang kompleks justru bisa memicu bug
  • Hal paling menarik dari pengumuman PHP 8.5 adalah stabilitas dan kedewasaan bahasanya

  • Mengejutkan bahwa PHP menambahkan array_first, array_last, fatal error stack trace lebih dulu daripada GTA6

    • Ini tambahan yang bagus, tetapi sebenarnya array_shift atau array_pop juga sudah cukup
  • Terus bertambahnya fungsi dan sintaks baru di PHP akan menaikkan biaya pemeliharaan dalam jangka panjang
    Jika melihat catatan rilis resmi, nilai beberapa fitur terasa meragukan

    • Ekstensi URI memang cepat, tetapi tumpang tindih dengan parse_url() yang sudah ada
    • Operator pipe adalah soal selera, dan bisa merusak konsistensi gaya kode
    • Peningkatan clone adalah perubahan kecil
    • #Discard/void menggantikan fungsi static analyzer
    • Closure di dalam konstanta memang menarik, tetapi bisa berujung pada #attribute yang rumit
    • Persistent handle cURL adalah peningkatan performa yang benar-benar nyata
    • array_first() hanya sebatas syntactic sugar, dan tampaknya jarang dipakai dalam proyek besar
  • Catatan rilis resmi PHP 8.5

  • Contoh operator pipe pada dasarnya menghilangkan cara umum di sebagian besar bahasa yang memakai variabel sementara
    Contoh parsing URL juga tidak dibandingkan langsung dengan parse_url()

    • parse_url() tidak sepenuhnya mengikuti standar dan lemah dalam menangani URL relatif
      Fungsi uri() yang baru lebih rapi, dan jika nanti ditambahkan fitur partial function application, rantai pipe akan menjadi lebih mudah dibaca
  • Di PHP CLI saya sering memakai **backtick ()** untuk memanggil shell_exec(), tetapi sekarang itu deprecated Saya sering menulis sesuatu seperti mkdir $dirname`

    • Itu adalah anti-pattern keamanan
      Karena ada risiko injeksi metakarakter shell, sebaiknya gunakan mkdir() atau pcntl_exec() milik PHP