Apa yang Baru di PHP 8.2: Tinjauan Komprehensif

Diterbitkan: 2023-10-17
Bagikan di Profil Sosial.

PHP, bahasa skrip sisi server yang banyak digunakan, terus berkembang untuk memenuhi tuntutan pengembangan web yang terus berubah. Peluncuran PHP 8.2 pada bulan November 2022 menghadirkan sejumlah fitur menarik, penghentian penting, dan perbaikan bug penting. Pada artikel ini, kita akan menyelami lebih dalam aspek-aspek penting dari apa yang baru di PHP 8.2, menjelaskan apa yang dapat diharapkan pengembang dari rilis terbaru ini.

Daftar isi

Fitur baru

1. Enums: Memperkenalkan Keamanan Tipe

Mungkin salah satu tambahan PHP yang paling ditunggu-tunggu, versi 8.2 akhirnya memperkenalkan dukungan asli untuk enumerasi (enum). Enum memungkinkan pengembang untuk mendefinisikan sekumpulan nilai bernama dengan tipe eksplisit, menambahkan lapisan keamanan tipe yang signifikan ke PHP.

Berikut ini contoh sederhana cara kerja enum:

 enum Color { case RED; case GREEN; case BLUE; }

Enum juga dapat memiliki nilai terkait, menjadikannya serbaguna untuk berbagai kasus penggunaan. Fitur ini sangat bermanfaat dalam memastikan bahwa kode Anda tetap dapat dibaca, dipelihara, dan tidak terlalu rentan terhadap bug yang berasal dari penyalahgunaan konstanta atau angka ajaib.

2. Promosi Konstruktor: Mengurangi Kode Boilerplate

PHP 8.2 memperkenalkan promosi konstruktor, sebuah fitur yang bertujuan untuk menyederhanakan definisi kelas dan mengurangi kode boilerplate. Dengan promosi konstruktor, Anda dapat mendeklarasikan dan menginisialisasi properti kelas secara langsung di daftar parameter konstruktor. Hal ini menghilangkan kebutuhan akan deklarasi properti terpisah, membuat kode Anda lebih ringkas dan mudah dipelihara.

 class User { public function __construct( public string $name, public string $email, public ?string $bio = null ) {} }

Promosi konstruktor sangat berharga ketika berhadapan dengan kelas yang memiliki banyak properti, karena mengurangi kekacauan dalam basis kode Anda.

3. Kelas Hanya Baca

Di PHP 8.2, kelas read-only memungkinkan pengembang untuk mendefinisikan kelas dengan properti yang hanya dapat diatur satu kali, biasanya selama pembuatan objek. Hal ini memastikan bahwa properti tetap konstan sepanjang masa pakai objek. Properti read-only dideklarasikan menggunakan pengubah readonly dan harus diinisialisasi di konstruktor kelas.

Dengan PHP 8.2, prosesnya menjadi lebih sederhana:

 class ReadOnlyClass $publicpassword , #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');

4. Argumen yang disebutkan dalam Pernyataan "termasuk" dan "membutuhkan".

Di PHP 8.2, argumen bernama sekarang dapat digunakan saat menyertakan atau memerlukan file. Fitur ini meningkatkan keterbacaan kode, terutama ketika berhadapan dengan fungsi yang menerima banyak argumen.

 include filename: 'my_file.php', once: true;

Dengan memberikan nama untuk argumen ini, Anda membuat kode Anda lebih jelas dan mengurangi kemungkinan terjadinya kesalahan karena urutan argumen yang salah.

5. Pemberitahuan Penghentian Tanda Kurung Implisit

Untuk meningkatkan konsistensi dan keterbacaan kode, PHP 8.2 memperkenalkan pemberitahuan penghentian fungsi dan metode yang dipanggil tanpa tanda kurung. Meskipun belum merupakan kesalahan, hal ini berfungsi sebagai peringatan bagi pengembang untuk menerapkan praktik yang disarankan yaitu menggunakan tanda kurung secara konsisten saat memanggil fungsi.

 // Deprecated usage myFunction; // Recommended usage myFunction();

Dengan menghilangkan tanda kurung implisit, PHP bertujuan untuk meningkatkan kejelasan dan pemeliharaan kode.

6. Dukungan untuk Menyembunyikan Nilai Parameter Sensitif

PHP menyediakan kemampuan untuk memonitor tumpukan panggilan pada keadaan program tertentu, yang terbukti sangat berguna ketika memecahkan masalah aplikasi. Namun, dalam kasus tertentu, pelacakan tumpukan mungkin berisi rincian rahasia yang memerlukan penyembunyian.

Di PHP 8.2, atribut baru bernama "SensitiveParameter" akan diperkenalkan. Atribut ini berfungsi untuk mengaburkan data sensitif agar tidak ditampilkan atau dicatat ketika aplikasi mengalami kesalahan. Secara praktis, penggunaannya akan tampak sebagai berikut:

 function passwords( $publicpassword , #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');

7. Pengenalan Fungsi mysqli_execute_query dan Metode mysqli::execute_query

PHP, bahasa skrip serbaguna untuk pengembangan web, terus berkembang untuk meningkatkan kemampuan dan kemudahan penggunaannya. Di PHP 8.2, pengembang dapat mengantisipasi pengenalan dua fitur baru: fungsi mysqli_execute_query dan metode mysqli::execute_query. Penambahan ini dirancang untuk menyederhanakan dan menyederhanakan interaksi database, sehingga lebih nyaman untuk bekerja dengan database MySQL.

Fungsi mysqli_execute_query

Fungsi mysqli_execute_query adalah tambahan yang kuat untuk ekstensi MySQLi PHP. Ini secara khusus dirancang untuk mengeksekusi query SQL terhadap database MySQL. Fungsi ini menawarkan cara yang mudah dan efisien untuk mengirim kueri SQL dan mengambil hasilnya. Berikut adalah contoh singkat penggunaannya:

 $mysqli = new mysqli("localhost", "username", "password", "database"); $sql = "SELECT * FROM users WHERE status = ?"; $stmt = $mysqli->prepare($sql); $status = "active"; $stmt->bind_param("s", $status); $result = mysqli_execute_query($stmt); while ($row = $result->fetch_assoc()) { } $stmt->close(); $mysqli->close();

Fungsi mysqli_execute_query menyederhanakan proses persiapan dan pelaksanaan kueri dengan tetap menjaga keamanan melalui pengikatan parameter.

mysqli::execute_query Metode

Selain fungsi baru, PHP 8.2 memperkenalkan metode mysqli::execute_query sebagai bagian dari kelas MySQLi. Metode ini menyederhanakan eksekusi kueri bagi pengembang yang lebih menyukai pemrograman berorientasi objek. Berikut ini contoh penggunaannya:

 $mysqli = new mysqli("localhost", "username", "password", "database"); $sql = "SELECT * FROM products WHERE category = ?"; $stmt = $mysqli->prepare($sql); $category = "electronics"; $stmt->bind_param("s", $category); $result = $stmt->execute_query(); while ($row = $result->fetch_assoc()) {} $stmt->close(); $mysqli->close();

Metode mysqli::execute_query menawarkan pendekatan berorientasi objek untuk mengeksekusi query database, memberikan pengalaman yang lebih intuitif bagi pengembang yang lebih menyukai gaya pengkodean ini.

8. Izinkan Konstanta dalam Sifat: Meningkatkan Penggunaan Kembali dan Pemeliharaan Kode

Sifat adalah fitur berharga dalam bahasa pemrograman modern, termasuk PHP, yang memungkinkan pengembang untuk menggunakan kembali kode di kelas yang berbeda tanpa memerlukan pewarisan. Ciri-ciri PHP pada dasarnya menyediakan metode, tetapi dalam PHP 8.2, peningkatan penting diperkenalkan: kemampuan untuk mendefinisikan konstanta dalam ciri-ciri. Fitur ini bertujuan untuk meningkatkan pengorganisasian kode, kegunaan kembali, dan pemeliharaan, sehingga menawarkan lebih banyak fleksibilitas kepada pengembang dalam desain kode mereka.

Peran Sifat dalam PHP

Sebelum mempelajari penambahan konstanta pada sifat, mari kita lihat kembali secara singkat peran sifat dalam PHP. Sifat adalah mekanisme penggunaan kembali kode dalam bahasa warisan tunggal seperti PHP. Mereka memungkinkan Anda untuk menentukan serangkaian metode yang dapat digunakan kembali di beberapa kelas. Saat sebuah kelas menggunakan suatu sifat, ia mewarisi metode yang ditentukan dalam sifat tersebut, sehingga meningkatkan modularitas kode dan mengurangi redundansi.

 trait Loggable { public function log($message) { }} class User { use Loggable; public function register() { $this->log('User registered.'); }}

Dalam contoh ini, sifat Loggable menyediakan metode log yang dapat digunakan oleh kelas mana pun yang menggabungkan sifat tersebut, sehingga meningkatkan pemeliharaan dan pengorganisasian kode.

Konstanta dalam Sifat: Fitur Baru

Dengan PHP 8.2, pengembang kini dapat mendefinisikan konstanta dalam suatu sifat, yang tidak mungkin dilakukan pada versi PHP sebelumnya. Konstanta dalam sifat bekerja serupa dengan konstanta dalam kelas, namun dapat diakses di kelas yang menggunakan sifat tersebut.

 trait Configuration {
const MAX_CONNECTIONS = 10;
}class Database {
use Configuration;
public function connect() { $maxConnections = self::MAX_CONNECTIONS; } }

Dalam contoh ini, sifat Konfigurasi mendefinisikan konstanta MAX_CONNECTIONS, yang dapat diakses dalam kelas Database yang menggunakan sifat tersebut. Hal ini memungkinkan sentralisasi konstanta konfigurasi dan mendorong struktur kode yang lebih terorganisir dan mudah dipelihara.

9. Memperkenalkan Tipe Disjunctive Normal Form (DNF) Baru di PHP 8.2

PHP, bahasa scripting yang dinamis dan serbaguna, terus berkembang untuk memenuhi tuntutan pengembangan web yang terus meningkat. Dengan dirilisnya PHP 8.2, pengembang akan mendapat hadiah dengan diperkenalkannya tipe Disjunctive Normal Form (DNF) yang baru. Penambahan bahasa ini meningkatkan ekspresi dan fleksibilitas PHP, memungkinkan pengembang untuk bekerja dengan ekspresi logis yang kompleks dengan lebih efektif.

Memahami Bentuk Normal Disjungtif (DNF)

Sebelum mempelajari tipe DNF baru di PHP 8.2, penting untuk memahami apa yang diwakili oleh Disjunctive Normal Form (DNF) dalam logika. DNF adalah bentuk kanonik yang merepresentasikan ekspresi logis dimana setiap ekspresi merupakan disjungsi (OR) dari konjungsi (AND). Dalam istilah yang lebih sederhana, ini adalah cara memecah pernyataan logis yang kompleks menjadi serangkaian kondisi sederhana yang digabungkan dengan operator OR.

Misalnya, ekspresi logis (A DAN B) OR (C DAN D) ada di DNF karena merupakan disjungsi dua konjungsi.

Tipe DNF Baru di PHP 8.2

PHP 8.2 memperkenalkan tipe DNF baru sebagai cara untuk bekerja dan memanipulasi ekspresi logika secara lebih intuitif. Jenis DNF ini memberikan abstraksi tingkat tinggi untuk menangani logika kompleks, sehingga memudahkan pengembang untuk mengelola kondisi rumit dalam kode mereka.

Berikut ikhtisar jenis DNF baru dan cara penggunaannya:

1. Bentuk Normal Disjungtif

Tipe DisjunctiveNormalForm mewakili ekspresi logika di DNF. Anda dapat membuat instance DisjunctiveNormalForm untuk merangkum kondisi kompleks:

 $dnfExpression = new DisjunctiveNormalForm(
new Conjunction('A', 'B'),
new Conjunction('C', 'D')
);

Dalam contoh ini, $dnfExpression mewakili ekspresi DNF (A DAN B) OR (C AND D).

2. Konjungsi

Tipe Konjungsi mewakili konjungsi (AND) dari satu atau lebih kondisi. Anda dapat membuat contoh Konjungsi untuk membangun konjungsi yang kompleks:

 $conjunction = new Conjunction('A', 'B', 'C');

Di sini, $konjungsi mewakili konjungsi (A DAN B DAN C).

3. Nilai Logis

Tipe LogicalValue mewakili nilai logika sederhana, yang bisa berupa benar, salah, atau variabel. Ini dapat digunakan bersama dengan tipe DNF lainnya untuk membuat ekspresi yang lebih kompleks:

 $value = new LogicalValue('A');

Di sini, $value mewakili variabel logis A.

10. Memperkenalkan Atribut AllowDynamicProperties: Memperluas Fleksibilitas dalam PHP

Atribut "AllowDynamicProperties" adalah tambahan yang luar biasa pada PHP, terutama bagi pengembang yang menghargai sifat dinamis bahasa tersebut. Dengan atribut ini, Anda dapat mengaktifkan objek untuk menerima dan memanipulasi properti yang belum didefinisikan secara eksplisit dalam kelasnya.

Berikut ini contoh sederhana bagaimana atribut "AllowDynamicProperties" dapat diterapkan:

 class DynamicObject {
}
$dynamicObj = new DynamicObject();
$dynamicObj->newProperty = "This is a dynamic property.";
echo $dynamicObj->newProperty;

Dalam contoh ini, kelas "DynamicObject" ditandai dengan atribut "AllowDynamicProperties", yang memungkinkan properti ditambahkan dan diakses secara dinamis. Perilaku dinamis ini bisa sangat berguna ketika berhadapan dengan objek yang perlu beradaptasi dengan berbagai struktur data atau ketika bekerja dengan data dari sumber eksternal, seperti API.

Penghentian dan Penghapusan di PHP 8.2

  • Ekstensi: PHP 8.2 telah mengucapkan selamat tinggal pada beberapa ekstensi yang ketinggalan jaman dan tidak terawat, termasuk "oci8", "mysql", "mcrypt", dan "interbase". Pengembang yang mengandalkan ekstensi ini sangat dianjurkan untuk bermigrasi ke alternatif modern untuk menjamin keamanan dan stabilitas aplikasi mereka.
  • masing-masing() Fungsi : Fungsi masing-masing() sekarang secara resmi tidak digunakan lagi di PHP 8.2. Fungsi ini digunakan untuk melakukan perulangan pada array dengan memajukan penunjuk internal dan mengembalikan pasangan nilai kunci saat ini. Namun, ia mempunyai berbagai masalah dan sebagian besar digantikan oleh loop foreach, yang menawarkan keterbacaan dan pemeliharaan yang lebih baik.
  • create_function() Fungsi : Fungsi create_function() ditandai sebagai tidak digunakan lagi. Fungsi ini digunakan untuk membuat fungsi anonim secara dinamis, namun tidak disarankan karena masalah keamanan dan alternatif yang lebih baik seperti penutupan.
  • FILTER_SANITIZE_MAGIC_QUOTES Bendera Filter : Bendera filter FILTER_SANITIZE_MAGIC_QUOTES tidak digunakan lagi. Bendera ini digunakan dengan filter_var() untuk membersihkan masukan dengan menambahkan garis miring sebelum karakter seperti tanda kutip tunggal dan tanda kutip ganda. Praktik terbaik modern menyarankan penggunaan pernyataan yang telah disiapkan dan kueri berparameter untuk menangani input database, sehingga tanda ini menjadi usang.
  • stristr() Fungsi : Fungsi stristr(), yang melakukan penelusuran peka huruf besar-kecil untuk substring dalam sebuah string, tidak digunakan lagi. Meskipun masih berfungsi, pengembang dianjurkan untuk menggunakan versi peka huruf besar-kecil, stripos(), atau versi alternatif str_contains() untuk kejelasan yang lebih baik.
  • definisikan() dengan Argumen Array : Menggunakan definisi() untuk mendefinisikan konstanta dengan array sebagai nilai kini tidak digunakan lagi. Meskipun dimungkinkan untuk mendefinisikan konstanta dengan array sebagai nilai, praktik ini dianggap tidak lazim, dan konstanta biasanya memiliki nilai skalar.
  • Bendera SORT_NUMERIC dan SORT_REGULAR : Bendera SORT_NUMERIC dan SORT_REGULAR untuk fungsi pengurutan seperti sort() dan usort() tidak digunakan lagi. Flag ini tidak diperlukan lagi, karena PHP secara otomatis mendeteksi tipe data elemen dan mengurutkannya sesuai dengan itu.

Peningkatan Kinerja

PHP 8.2 menghadirkan berbagai peningkatan kinerja dan optimalisasi. Meskipun tingkat peningkatan ini dapat bervariasi tergantung pada kasus penggunaan spesifik Anda, peningkatan ke PHP 8.2 kemungkinan akan memberikan beberapa manfaat kinerja yang signifikan. Peningkatan ini dapat berdampak signifikan pada aplikasi dengan lalu lintas tinggi atau aplikasi yang melakukan tugas intensif sumber daya, menjadikannya lebih responsif dan efisien.

Perbaikan Bug dan Stabilitas

Seperti halnya rilis PHP baru, PHP 8.2 mengatasi banyak bug dan masalah stabilitas. Perbaikan ini sangat penting untuk menjaga keandalan bahasa secara keseluruhan dan memastikan bahwa PHP terus menjadi pilihan tepat untuk pengembangan web.

FAQ - Baru di PHP 8.2

Mengapa pemberitahuan penghentian tanda kurung implisit diperkenalkan di PHP 8.2?

Pemberitahuan penghentian penggunaan tanda kurung implisit mendorong gaya kode yang konsisten dengan memperingatkan pengembang untuk menggunakan tanda kurung saat memanggil fungsi. Hal ini meningkatkan kejelasan dan pemeliharaan kode.

Apa itu kelas readonly dan bagaimana cara kerjanya di PHP 8.2?

Kelas readonly di PHP 8.2 memungkinkan properti disetel hanya sekali, biasanya selama pembuatan objek, memastikan bahwa properti tetap konstan sepanjang masa pakai objek. Properti readonly dideklarasikan menggunakan pengubah readonly.

Bagaimana fungsi mysqli_execute_query dan metode mysqli::execute_query menyederhanakan interaksi database di PHP 8.2?

Fitur-fitur ini menyederhanakan proses eksekusi kueri SQL terhadap database MySQL, menyediakan cara yang efisien dan aman untuk mengirim kueri dan mengambil hasilnya, baik secara prosedural atau berorientasi objek.

Bagaimana atribut "AllowDynamicProperties" memperluas fleksibilitas di PHP 8.2?

Atribut "AllowDynamicProperties" memungkinkan objek menerima dan memanipulasi properti yang belum didefinisikan secara eksplisit dalam kelasnya, sehingga meningkatkan sifat dinamis PHP.

Mengapa perbaikan bug dan stabilitas penting di PHP 8.2?

Perbaikan bug dan peningkatan stabilitas di PHP 8.2 sangat penting untuk menjaga keandalan bahasa secara keseluruhan, memastikan bahwa PHP tetap menjadi pilihan yang tepat untuk pengembangan web dengan mengatasi masalah dan meningkatkan stabilitasnya.

Kesimpulan

Kesimpulannya, PHP 8.2 muncul sebagai tonggak penting dalam lanskap pengembangan web yang terus berkembang. Dengan beragam fitur inovatif, peningkatan fleksibilitas, dan optimalisasi kinerja, ini memenuhi permintaan pengembang di seluruh dunia yang terus berkembang.

Pengenalan enum, promosi konstruktor, kelas read-only, argumen bernama, dan atribut AllowDynamicProperties memberdayakan pengembang untuk menulis kode yang lebih bersih dan mudah dipelihara. Selain itu, tipe Disjunctive Normal Form (DNF) yang baru menghadirkan kemampuan manipulasi logika tingkat lanjut ke PHP, yang semakin memperluas keserbagunaannya. Namun, seiring kemajuan PHP, PHP juga mengucapkan selamat tinggal pada ekstensi dan fungsi yang ketinggalan jaman sambil terus berupaya mengatasi bug, memastikan bahwa PHP tetap menjadi pilihan yang andal dan aman untuk pengembangan web.

Konten Terkait:

Cara Memperbaiki Kesalahan "WordPress Nonaktifkan Pembaruan PHP Diperlukan" (2 metode)

Log Kueri Lambat MySQL