PHP dirilis dalam ritme tahunan, dan tidak semua server menjalankan versi yang sama: laptop Anda mungkin memakai PHP 8.4, sementara server kantor masih di 8.2. Kode yang mulus di satu versi bisa menolak berjalan di versi lain — baik karena memakai fitur baru, maupun karena perilaku lama yang sudah dirapikan. Pada chapter terakhir Section ini kita mempelajari peta versi PHP beserta status dukungannya, cara memeriksa versi dari terminal maupun dari dalam kode, dan teknik menulis kode yang tetap kompatibel lintas versi.
Siklus Rilis dan Dukungan Versi #
Sejak PHP 5.6, komunitas PHP menjalankan jadwal rilis yang teratur: satu versi minor baru setiap tahun (biasanya November atau Desember), dengan dua fase dukungan — dua tahun pertama active support (perbaikan bug dan rilis reguler), lalu dua tahun berikutnya security support (hanya perbaikan keamanan). Setelah fase kedua berakhir, versi tersebut dinyatakan end of life (EOL) dan tidak menerima perbaikan apa pun lagi.
Berikut status cabang PHP yang masih relevan per akhir 2026, berdasarkan halaman resmi php.net:
| Cabang | Rilis pertama | Active support sampai | Security support sampai | Status akhir 2026 |
|---|---|---|---|---|
| PHP 8.2 | 8 Des 2022 | 31 Des 2024 | 31 Des 2026 | Akhir security support |
| PHP 8.3 | 23 Nov 2023 | 31 Des 2025 | 31 Des 2027 | Security only |
| PHP 8.4 | 21 Nov 2024 | 31 Des 2026 | 31 Des 2028 | Masih active support |
| PHP 8.5 | 20 Nov 2025 | 31 Des 2027 | 31 Des 2029 | Active support, terbaru |
Memeriksa Versi PHP #
Cara tercepat mengetahui versi PHP di sebuah lingkungan adalah perintah php -v dari terminal:
php -vOutput yang Dihasilkan:
PHP 8.4.23 (cli) (built: Jul 7 2026 05:22:53) (NTS gcc 14.2.0)
Copyright (c) The PHP Group
Built by static-php-cli 2.8.6
Zend Engine v4.4.23, Copyright (c) Zend TechnologiesBaris pertama memuat informasi terpenting: versi PHP (8.4.23), SAPI yang dipakai (cli), tanggal pembangunan, serta status thread safety (NTS berarti non-thread-safe). Baris-baris berikutnya menampilkan hak cipta The PHP Group dan versi Zend Engine yang mengikuti versi bahasa. Tampilan persisnya berbeda-beda antar instalasi — sebagian menambahkan baris seperti with Zend OPcache bila ekstensi tersebut aktif — jadi jangan kaget bila output di komputer Anda tidak serupa baris demi baris.
Perintah php --ini juga berguna: ia menunjukkan berkas php.ini mana yang benar-benar dimuat, sesuatu yang sering menjadi sumber kebingungan ketika pengaturan “sudah diubah tapi tidak berpengaruh”. Keduanya akan kita pakai lagi pada Section Instalasi dan Lingkungan Pengembangan.
Menulis Kode yang Sadar Versi #
Untuk kode yang harus berjalan di beberapa versi, PHP menyediakan dua alat bawaan: fungsi version_compare() dan konstanta PHP_VERSION_ID. Perhatikan contoh berikut:
<?php
echo "Versi PHP saat ini : " . PHP_VERSION . "\n";
echo "PHP_VERSION_ID : " . PHP_VERSION_ID . "\n\n";
$versiMinimum = "8.1.0";
if (version_compare(PHP_VERSION, $versiMinimum, ">=")) {
echo "Server memenuhi syarat minimum (>= {$versiMinimum}).\n";
} else {
echo "Server terlalu lama; aplikasi butuh PHP {$versiMinimum} atau lebih baru.\n";
}
if (PHP_VERSION_ID >= 80400) {
echo "Fitur PHP 8.4 (mis. property hooks) dapat digunakan.\n";
} elseif (PHP_VERSION_ID >= 80000) {
echo "Hanya fitur sampai PHP 8.0 yang dijamin tersedia.\n";
}Output yang Dihasilkan:
Versi PHP saat ini : 8.4.23
PHP_VERSION_ID : 80423
Server memenuhi syarat minimum (>= 8.1.0).
Fitur PHP 8.4 (mis. property hooks) dapat digunakan.Mari kita bedah program di atas:
- Baris 3:
PHP_VERSION_IDmenyandikan versi menjadi angka enam digit —80423berarti 8.4.23,80100berarti 8.1.0. Dibandingkan sebagai integer,80423 >= 80100langsung menjawab “versi ini lebih baru dari 8.1.0” tanpa perlu mengurai teks. - Baris 7 (
version_compare(...)): membandingkan dua string versi secara “pintar” — memahami bahwa8.10lebih baru dari8.9— dengan operator relasi"ge","lt", atau seperti di sini">=". Cocok untuk kebutuhan seperti menampilkan pesan di halaman instalasi. - Baris 13 sampai 17: pola percabangan bertingkat untuk menawarkan jalur fitur yang sesuai versi, teknik yang sering dipakai pustaka lintas versi.
Deteksi Fitur sebagai Polyfill #
Membandingkan versi bukan satu-satunya cara. Untuk fitur berbentuk fungsi, pendekatan yang lebih tangguh adalah mendeteksi keberadaannya langsung dengan function_exists(). Teknik ini menjadi dasar polyfill — implementasi cadangan yang hanya aktif bila fitur bawaan belum tersedia:
<?php
// Polyfill: hanya aktif bila fungsi bawaan belum ada (PHP < 8.0)
if (!function_exists("str_contains")) {
function str_contains(string $haystack, string $needle): bool
{
return $needle === "" || strpos($haystack, $needle) !== false;
}
}
var_dump(str_contains("Belajar PHP", "PHP"));
var_dump(str_contains("Belajar PHP", "Python"));Output yang Dihasilkan:
bool(true)
bool(false)Pada PHP 8.0 ke atas, blok if tidak pernah berjalan karena str_contains() sudah menjadi fungsi bawaan; pada PHP 7.4 ke bawah, fungsi tiruan yang memakai strpos() mengambil alih sehingga pemanggil tetap aman. Dua baris var_dump() di akhir membuktikan hasilnya konsisten di kedua dunia. Pola yang sama berlaku untuk class (class_exists()), interface (interface_exists()), dan konstanta (defined()).
Kompatibilitas Mundur dan Ketegasan PHP 8 #
PHP 8.0 menjadi batas penting dalam hal kompatibilitas mundur. Banyak perilaku lama yang semula hanya notice atau diam-diam ditoleransi diubah menjadi warning atau error. Contoh konkret: variabel yang belum didefinisikan kini memicu Warning: Undefined variable; kunci array yang tidak ada memicu Warning: Undefined array key; dan operasi aritmetika pada string non-numerik seperti "kucing" + 1 melempar TypeError: Unsupported operand types. Sintaks kurung kurawal untuk akses karakter string ($teks{0}) dihapus total dan kini menjadi parse error.
Di sisi lain, PHP 8 juga memperkenalkan fitur yang hanya tersedia mulai versi tersebut. Dua contoh yang paling sering dipakai sehari-hari adalah fungsi str_contains() dan ekspresi match:
<?php
$kodePos = "40115";
// str_contains() baru tersedia sejak PHP 8.0
echo "Kode pos mengandung tanda hubung: ";
echo str_contains($kodePos, "-") ? "ya" : "tidak";
echo "\n";
// match expression juga diperkenalkan di PHP 8.0
$metode = "QRIS";
$biaya = match ($metode) {
"BRIVA", "VA_BCA" => 0,
"QRIS" => 700,
default => 2500,
};
echo "Biaya untuk metode {$metode}: Rp" . $biaya . "\n";Output yang Dihasilkan:
Kode pos mengandung tanda hubung: tidak
Biaya untuk metode QRIS: Rp700Pada program di atas, str_contains() memeriksa keberadaan satu string di dalam string lain dan mengembalikan true atau false, sedangkan match membandingkan satu nilai terhadap banyak kemungkinan lalu menghasilkan nilai dari cabang yang cocok — alternatif switch yang ringkas dan bisa dimasukkan ke variabel. Keduanya tidak dikenal sama sekali di PHP 7: match bahkan langsung menjadi parse error karena merupakan sintaks baru, bukan sekadar fungsi yang bisa di-polyfill.
Dampak praktisnya: aplikasi era PHP 7 yang “tampak sehat” bisa menghujani log dengan peringatan begitu dipindahkan ke PHP 8, dan sebagian kecil bahkan berhenti total. Karena itu, setiap peningkatan versi besar wajib disertai pembacaan migration guide resmi — dokumen perubahan untuk tiap rilis yang tersedia di php.net — dan pengujian menyeluruh. Sebaliknya, kode yang ditulis dengan disiplin (memeriksa keberadaan variabel, memakai type declaration, tidak bergantung perilaku konversi implisit) umumnya melewati pembaruan versi dengan mulus.
Ringkasan #
PHP merilis versi minor setiap tahun dengan dua tahun active support dan dua tahun security support; per akhir 2026, cabang 8.4 dan 8.5 berstatus aktif sementara 8.2 dan 8.3 berada di fase keamanan. Perintah php -v mengungkap versi lingkungan, PHP_VERSION_ID dan version_compare() memungkinkan kode menyesuaikan diri, dan deteksi fitur dengan function_exists() menjadi fondasi polyfill. Dengan kesadaran versi ini, fondasi teori Anda sudah lengkap — saatnya turun ke praktik: memasang PHP di komputer Anda sendiri pada Section Instalasi dan Lingkungan Pengembangan.