Jika kalian pernah belajar kelas backend di Dicoding, harusnya sudah tidak asing dengan JavaScript. Selain JavaScript, salah satu bahasa pemrograman yang banyak digunakan untuk membangun backend web adalah PHP. Pertama kali diciptakan oleh Rasmus Lerdorf pada tahun 1994 dengan kepanjangan Personal Home Page. Barulah kemudian pada sekitar tahun 1997, kepanjangan PHP berubah menjadi PHP: Hypertext Preprocessor seperti yang kita kenal saat ini. Menarik ya, karena nama PHP ternyata berupa singkatan rekursif.
Sejak bertahun-tahun lalu, tidak sedikit developer yang beranggapan PHP adalah bahasa jadul, memiliki banyak kelemahan, dan akan segera mati. Namun, faktanya masih banyak situs web di luar sana yang dibangun dengan PHP. Berdasarkan data dari W3Techs, PHP masih digunakan di lebih dari 74% situs web di dunia. Selain itu, survei The State of Developer Ecosystem 2022 dari JetBrains menunjukkan PHP berada di peringkat 7 bahasa pemrograman terfavorit yang digunakan oleh developer.
PHP mulai berbenah semenjak rilis mayor PHP 7.4. Banyak perbaikan dan fitur baru yang dihadirkan untuk meningkatkan performa dan pengalaman developer. Bahkan di akhir 2021, The PHP Foundation dibentuk untuk memastikan keberlangsungan pengembangan bahasa ini. Saat ini rilisan terbaru yang stabil untuk digunakan adalah PHP 8.2. Apa saja fitur baru yang menarik untuk kita implementasikan? Berikut adalah beberapa di antaranya.
💻 Mulai Belajar Pemrograman
Belajar pemrograman di Dicoding Academy dan mulai perjalanan Anda sebagai developer profesional.
Daftar SekarangConstructor Property Promotion
Di versi sebelumnya, untuk mendefinisikan properti dari sebuah kelas secara eksplisit, kita perlu menuliskannya di bagian atas kelas. Kemudian ketika ingin mengeset nilainya saat kelas diinstansiasi, kita perlu menulis cukup banyak kode, tergantung seberapa banyak properti yang dimiliki kelas tersebut. Contohnya seperti ini.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Person { private string $name; private Date $birthday; private Address $address; public function __construct( string $name, Date $birthday, Address $address ) { $this->name = $name; $this->birthday = $birthday; $this->address = $address; } } |
Selain panjang, kode di atas juga banyak mengulang kata kunci yang sama, seperti name
, birthday
, dan address
. Pada PHP 8, kode di atas dapat diringkas menggunakan constructor property promotion. Fitur ini memungkinkan kita menulis class constructor sekaligus menginisiasi dan mengeset nilai properti dengan sintaks yang jauh lebih pendek sehingga kode di atas dapat kita ringkas menjadi seperti berikut.
1 2 3 4 5 6 7 8 |
class Person { public function __construct( private string $name, private Date $birthday, private Address $address ) { } } |
Baca: RFC Constructor Property Promotion
Named Arguments
Pernahkah kamu menemukan fungsi atau method dengan banyak parameter? Saking banyaknya, kadang kita sampai lupa urutan parameternya. Belum lagi jika ada parameter dengan nilai default dan kita tidak ingin mengubahnya. Di versi 7 dan sebelumnya, kita harus menuliskannya secara urut. Gambaran sederhananya, perhatikan kode berikut.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
function addPerson( string $name, ?Date $birthday = null, ?Address $address = null ) { Â Â ... } $cleo = addPerson( 'Cleo', new Date('2000-06-01'), new Address('Jalan Kebenaran 1') ); |
Dari contoh kode di atas, bagaimana jika ingin memanggil fungsi addPerson
yang berisi nama dan alamat saja? Tentu kita perlu memberikan nilai null
secara eksplisit untuk parameter birthday
.
1 2 3 4 5 |
$cleo = addPerson( 'Cleo', null, new Address('Jalan Kebenaran 1') ); |
Dengan named arguments, kita bisa memanggil fungsi tersebut tanpa perlu menuliskan nilai untuk parameter yang tidak ingin kita beri nilai.
1 2 3 4 |
$cleo = addPerson( name: 'Cleo', address: new Address('Jalan Kebenaran 1') ); |
Selain itu, kita juga bisa membuat menjalankan fungsi tersebut dengan urutan parameter yang tidak harus sama ketika fungsi tersebut didefinisikan.
1 2 3 4 5 |
$cleo = addPerson( address: new Address('Jalan Kebenaran 1'), name: 'Cleo', birthday: new Date('2000-06-01') ); |
Baca: RFC Named Arguments
Enums
Enum atau enumeration adalah salah satu model data untuk menyimpan sekelompok opsi yang bernilai unik. Jika kalian pernah menggunakan konstanta, sederhananya enum ini mengelompokkan beberapa konstanta dalam satu wadah/konteks yang sama. Misalnya, kita ingin menyediakan beberapa opsi dokumen identitas, seperti KTP, paspor, dan SIM. Sebelum adanya fitur enum, developer PHP biasanya menggunakan class constant atau memanfaatkan library seperti spatie/enum
atau myclabs/php-enum
.
1 2 3 4 5 6 7 8 9 |
class IdentityDocument { Â Â public const KTP = 'ktp'; Â Â public const SIM = 'sim'; Â Â public const PASPOR = 'paspor'; } echo 'ktp' === IdentityDocument::KTP; // true echo IdentityDocument::KTP === IdentityDocument::KTP; // true |
Sekarang kita dapat menulis object di atas menjadi sebuah enum seperti berikut.
1 2 3 4 5 6 7 8 9 |
enum IdentityDocument { Â Â case KTP; Â Â case SIM; Â Â case PASPOR; } echo 'ktp' === IdentityDocument::KTP; // false echo IdentityDocument::KTP === IdentityDocument::KTP; // true |
Jika dilihat sekilas, kode di atas memang tidak terlalu berbeda. Lalu, kenapa lebih baik menggunakan enum? Enum membantu kita menulis kode yang lebih mudah di-maintain dan mengurangi potensi kesalahan. Misalnya, tanpa enum, kita bisa saja membandingkan nilai sebuah konstanta dengan string. Ketika menggunakan string, akan lebih sulit mengecek di mana saja string tersebut digunakan. Terlebih jika kita ingin me-refactor atau mengubah string tersebut.
Baca: RFC Enumeration
Match Expressions
Seperti halnya dengan enumeration di atas, PHP juga mengambil inspirasi dari bahasa pemrograman lain untuk menerapkan fitur ini. Di bahasa lain mungkin kita lebih familier dengan istilah pattern matching. Fitur ini sebenarnya mirip dengan switch
yang sudah lama tersedia. Bedanya, match
melakukan perbandingan nilai dengan lebih aman karena menggunakan strict comparison (===
). Selain itu, match juga mendukung nilai kembalian sehingga kita tidak perlu mendefinisikan variabel di tiap-tiap case
.
1 2 3 4 5 6 7 8 9 10 11 12 |
$id = $_GET['id']; // string(1) switch ($id) { Â Â case 1: Â Â Â $result = "Integer Satu"; Â Â Â break; Â Â case '1': Â Â Â $result = "String Satu"; Â Â Â break; } echo $result; // "Integer Satu" |
Ketika menggunakan match
, kita perlu memastikan bahwa nilai yang akan dibandingkan memiliki tipe data dan nilai yang sama. Ini akan membantu developer untuk menulis kode dengan lebih aman dan tidak mengagetkan ketika hasilnya tidak sesuai ekspektasi.
1 2 3 4 5 6 7 8 |
$id = $_GET['id']; // string(1) $result = match ($id) { Â Â case 1 => 'Integer Satu', Â Â case '1' => 'String Satu', }; echo $result; // "String Satu" |
Baca: RFC Match Expressions
Nah, itulah beberapa fitur baru di PHP 8+ yang bisa mulai digunakan di projek yang kita bangun. Kalian sudah pakai yang mana saja? Atau adakah fitur lain yang tak kalah menarik? Mari diskusi di kolom komentar.