Fitur-fitur baru di PHP 8.5
(stitcher.io)- 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 bentukclone($this, ['title' => $title]) - Namun, saat menyalin properti readonly dari luar, diperlukan penentu akses
public(set)
- Pada kelas contoh
-
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
staticdan tidak dapat mengakses variabel eksternal
- Pada contoh, didefinisikan di dalam atribut dalam bentuk
-
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()danarray_last()- Mengembalikan elemen pertama dan terakhir dari array dengan sederhana
- Menggantikan pendekatan lama yang lebih rumit dengan
array_key_first()danarray_key_last()
-
Penambahan parser URI baru
- Menyediakan metode seperti
getHost(),getScheme(),getPort(), dan lainnya melalui kelasUri\Rfc3986\Uri - Menyederhanakan manipulasi dan analisis URI
- Menyediakan metode seperti
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
- Memungkinkan penundaan waktu validasi untuk beberapa atribut seperti
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_FAILUREsaat memanggilfilter_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_classesdihapus - 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
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
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
Kita bisa menulisnya dengan rumit, tetapi tidak harus begitu
Saya pernah memakai tool terkait Zend di pertengahan 2000-an, dan saya ingat itu cukup merepotkan
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 memakai C++ selama 10 tahun, tetapi sekarang PHP jauh lebih mudah dibaca daripada kode C++ modern
Rasanya tujuan kesederhanaan menghilang, dan yang terus bertambah hanya fitur
Bidang web berubah sangat cepat, jadi kalau tidak mengikuti akan tertinggal
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
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
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
Dengan framework seperti Laravel, lingkungannya jauh lebih stabil dan matang
Seperti bermain gitar atau menulis puisi, semua orang bisa mencobanya, tetapi melakukannya dengan baik itu sulit
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
Pada akhirnya, bahasa berorientasi objek tradisional tampaknya berkumpul ke arah yang serupa
Bahkan jika itu bahasa khusus web, tetap ada banyak alasan untuk terus berkembang. Meningkatkan pengalaman developer selalu bernilai
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
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
parse_url()yang sudah adaCatatan 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 relatifFungsi
uri()yang baru lebih rapi, dan jika nanti ditambahkan fitur partial function application, rantai pipe akan menjadi lebih mudah dibacaDi PHP CLI saya sering memakai **backtick (
)** untuk memanggil shell_exec(), tetapi sekarang itu deprecated Saya sering menulis sesuatu sepertimkdir $dirname`Karena ada risiko injeksi metakarakter shell, sebaiknya gunakan
mkdir()ataupcntl_exec()milik PHP