PHP yang kamu temui di tutorial lama dan PHP yang ditulis tim profesional hari ini sudah sangat berbeda. Sejak PHP 7 dan terutama PHP 8, bahasa ini mendapat sistem tipe yang lebih kuat, sintaks yang ringkas, dan performa jauh lebih baik. Artikel ini merangkum fitur-fitur yang paling berdampak, lengkap dengan contoh.
Mengapa "PHP modern" penting?
- Lebih aman: tipe data eksplisit menangkap bug sebelum menjadi masalah produksi.
- Lebih ringkas: banyak kode boilerplate hilang.
- Lebih cepat: PHP 7 memangkas waktu eksekusi hampir setengahnya dibanding PHP 5.6, dan PHP 8 menambah JIT dan peningkatan lain.
- Didukung ekosistem: framework terkini (Laravel, Symfony) membutuhkan PHP 8.1+.
Fitur-fitur yang wajib kamu kenal
1. Type declarations (tipe parameter dan return)
function hitungDiskon(float $harga, int $persen): float
{
return $harga * $persen / 100;
}
Tambahkan declare(strict_types=1); di awal file agar PHP tidak diam-diam mengonversi tipe (misalnya string "10" menjadi angka).
2. Union types dan nullable (PHP 8.0)
function cari(int|string $id): ?Pengguna // boleh null
{
// ...
}
3. Named arguments (8.0)
Menyebut nama parameter membuat pemanggilan mudah dibaca dan urutan bebas:
buatUser(nama: 'Sari', aktif: true, peran: 'admin');
4. Constructor property promotion (8.0)
Menghapus kode berulang saat mendefinisikan properti:
// Dulu: deklarasi properti + parameter + assignment
// Sekarang:
class Produk
{
public function __construct(
public string $nama,
public float $harga,
public int $stok = 0,
) {}
}
5. match: switch yang lebih baik (8.0)
match mengembalikan nilai, memakai perbandingan ketat (===), dan melempar error jika tak ada yang cocok:
$label = match ($status) {
'draft' => 'Konsep',
'terbit' => 'Dipublikasikan',
default => 'Tidak diketahui',
};
6. Nullsafe operator ?-> (8.0)
$kota = $pengguna?->alamat?->kota; // null jika salah satu null
7. Enum (8.1)
Menggantikan konstanta string yang rawan salah ketik:
enum Status: string
{
case Draft = 'draft';
case Terbit = 'terbit';
public function label(): string
{
return match ($this) {
self::Draft => 'Konsep',
self::Terbit => 'Terbit',
};
}
}
$s = Status::from('terbit');
echo $s->label();
8. Readonly properties (8.1) dan readonly class (8.2)
Properti yang hanya bisa diisi sekali, cocok untuk objek nilai (value object):
final class Uang
{
public function __construct(
public readonly int $jumlah,
public readonly string $mata_uang,
) {}
}
9. Attributes (8.0)
Metadata terstruktur yang menggantikan banyak anotasi di komentar:
#[Route('/produk', methods: ['GET'])]
public function index() {}
10. First-class callable syntax (8.1)
$panjang = strlen(...); // closure dari fungsi
$fn = $objek->metode(...);
11. Fungsi string baru dan lainnya
str_contains(), str_starts_with(), str_ends_with() menggantikan trik strpos(...) !== false yang membingungkan. Ada pula operator spread untuk array dengan key string, never return type, dan new di dalam initializer.
Ringkasan per versi
| Versi | Sorotan utama |
|---|---|
| 8.0 | Named args, union types, match, nullsafe, attributes, promotion, JIT |
| 8.1 | Enum, readonly, first-class callable, fibers, never |
| 8.2 | Readonly class, DNF types, penghapusan fitur lama (dynamic property deprecated) |
| 8.3 | Typed class constants, #[Override], json_validate() |
Pastikan selalu memakai versi yang masih mendapat dukungan keamanan. Cek jadwal rilis di php.net.
Ekosistem dan praktik modern
- Composer: pengelola dependency standar.
composer require vendor/paket. - Autoloading PSR-4: tidak perlu
requiremanual; kelas dimuat otomatis berdasarkan namespace. - Standar kode PSR-12 dan formatter otomatis (PHP-CS-Fixer, Laravel Pint).
- Analisis statis: PHPStan atau Psalm menemukan bug tipe tanpa menjalankan kode.
- Testing: PHPUnit atau Pest.
- Framework: Laravel, Symfony, dan lainnya, semuanya mengandalkan fitur modern ini.
Kebiasaan yang perlu ditinggalkan
| Kebiasaan lama | Gantinya |
|---|---|
mysql_* / mysqli dengan SQL tersambung string | PDO + prepared statement, atau ORM |
| Mencampur HTML dan logika dalam satu file | Pemisahan view dan template engine |
include/require manual di mana-mana | Composer autoload |
| Array asosiatif untuk data terstruktur | Class dengan properti bertipe, enum |
| Menonaktifkan error report | Tampilkan error di dev, log di produksi |
== longgar yang menimbulkan hasil aneh | === dan strict types |
Contoh sebelum dan sesudah
Gaya lama:
class Pengguna {
private $nama;
private $peran;
function __construct($nama, $peran = 'user') {
$this->nama = $nama;
$this->peran = $peran;
}
function getNama() { return $this->nama; }
}
Gaya modern:
final class Pengguna
{
public function __construct(
public readonly string $nama,
public readonly Peran $peran = Peran::User,
) {}
}
Jauh lebih pendek, bertipe, dan tidak bisa dimodifikasi tak sengaja.
Cara naik ke PHP modern
- Perbarui ke PHP 8.2+ di lingkungan pengembangan.
- Aktifkan
declare(strict_types=1);pada file baru. - Jalankan PHPStan dengan level rendah, naikkan bertahap.
- Ganti array konfigurasi/status dengan enum dan value object.
- Ikuti catatan deprecation sebelum meng-upgrade versi mayor.
Kesimpulan
PHP modern adalah bahasa yang berbeda dengan reputasinya: bertipe, ekspresif, dan cepat. Menguasai fitur seperti constructor promotion, enum, match, dan readonly membuat kodemu lebih ringkas dan lebih aman, dan ini adalah fondasi untuk belajar Laravel.
Komentar (0)
Masuk / Daftar