Tutorial

Tutorial PHP 8: 7 Fitur Baru PHP 8 yang Wajib Diketahui (Panduan Belajar PHP 8)

Rusmawan Abdullah Sani
Rusmawan Abdullah Sani
Diterbitkan: 01 Juli 2026
Diperbarui: 16 Agustus 2026
7 Menit

Selamat datang di Infokoding! Dalam tutorial programming kali ini, kita akan membedah secara langsung fitur-fitur baru PHP 8 yang tidak hanya mempercepat performa aplikasi, tetapi juga membuat sintaks kode Anda menjadi jauh lebih bersih dan modern dibanding versi PHP 7.x.

Tutorial PHP 8 dan Fitur Baru PHP 8 di Infokoding

Ringkasan Eksekutif (Fitur Utama PHP 8)

Pembaruan bahasa pemrograman PHP 8 menghadirkan perombakan arsitektur dan sintaks modern untuk efisiensi coding & performa tinggi:

  • JIT Compiler: Kompilasi bytecode ke instruksi mesin secara real-time untuk mempercepat komputasi CPU.
  • Named Arguments & Attributes: Eksekusi parameter spesifik tanpa ketergantungan urutan serta anotasi native terstruktur.
  • Constructor Property Promotion & Match Expression: Memangkas 70% kode boilerplate pada pendeklarian kelas dan percabangan kondisional.
Fitur Utama PHP 8 Fungsi Ringkas Manfaat Utama Developer
JIT Compiler Kompilasi bytecode langsung ke instruksi CPU Percepat komputasi CPU ↑ +85.7%
Named Arguments Pengiriman argumen fungsi berdasar nama parameter Lompati parameter opsional dengan mudah
Attributes Native Metadata terstruktur pengganti PHPDoc Annotations Validasi sintaks otomatis saat kompilasi
Constructor Promotion Deklarasi properti kelas langsung di __construct() Memotong 70% kode boilerplate kelas
Nullsafe Operator Operator ?-> untuk chaining method aman null Cegah Fatal Error member function on null

Mengapa Harus Upgrade ke PHP 8?

Sebagai developer Indonesia yang bergelut di dunia pengembangan web dan backend, memahami Fitur Baru PHP 8 adalah kebutuhan mutlak. Dalam Tutorial PHP 8 ini, kita tidak hanya melihat perubahan sintaks, melainkan perombakan arsitektur besar-besaran dari PHP 7.x. Saat Anda memutuskan untuk Belajar PHP 8 melalui Panduan PHP 8 ini, Anda membuka peluang untuk membangun aplikasi yang jauh lebih cepat, aman, dan mudah dirawat (maintainable).

perbandingan performa PHP 8 tutorial programming infokoding

Dengan integrasi JIT (Just-In-Time) Compiler, skrip bahasa pemrograman PHP 8 dikompilasi langsung menjadi instruksi mesin pada saat runtime. Ini membuat eksekusi algoritma berat dan pengolahan data matematis berjalan jauh lebih kencang dibanding generasi sebelumnya.

1. JIT (Just-In-Time) Compiler

Poin Penting JIT Compiler (Scraping AI):
  • Kompilasi opcode langsung ke instruksi mesin CPU pada saat runtime.
  • Paling berdampak pada fungsi CPU-bound (matematis, pengolahan gambar).
  • Diaktifkan via parameter opcache.jit_buffer_size dan opcache.jit=tracing pada php.ini.

Fitur baru PHP 8 yang paling banyak dibicarakan adalah JIT Compiler. Secara default, Zend Engine menerjemahkan kode PHP menjadi opcode yang kemudian dieksekusi oleh Virtual Machine. JIT membawa kompilasi satu langkah lebih maju dengan mengubah opcode tertentu menjadi instruksi mesin CPU (machine code) secara langsung. Untuk rincian konfigurasi OPcache JIT, Anda dapat merujuk ke Dokumentasi Resmi PHP JIT Compiler di php.net.

Berikut adalah blok kode konfigurasi langsung pada file php.ini server Anda untuk mengaktifkan JIT Compiler secara optimal:

; Edit file php.ini server Anda
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.revalidate_freq=60

; Konfigurasi JIT Buffer & Mode Tracing
opcache.jit_buffer_size=100M
opcache.jit=tracing

💡 Catatan Performa: JIT Compiler paling berdampak pada tugas-tugas berat berorientasi CPU (seperti pengolahan gambar, enkripsi, atau kalkulasi matematis), sementara untuk aplikasi I/O bound (seperti query database dasar), optimasi didapatkan dari peningkatan efisiensi core PHP 8 secara keseluruhan.

2. Cara Menggunakan Union Types di PHP 8

Poin Penting Union Types (Scraping AI):
  • Mendukung pendeklarian banyak tipe data sekaligus (misal: int|float) menggunakan simbol pipe (|).
  • Mencegah error runtime dan memperkuat Type Safety tanpa mengandalkan komentar PHPDoc.

Sebelum PHP 8, jika sebuah fungsi menerima lebih dari satu tipe data (misal int atau float), developer terpaksa mengandalkan komentar PHPDoc tanpa validasi tipe secara native dari mesin PHP. PHP 8 menghadirkan Union Types sebagai solusi native.

Sebelum PHP 8:


/**
 * @param int|float $number
 * @return int|float
 */
function doubleNumber($number) {
    return $number * 2;
}

Dengan PHP 8 (Union Types):


function doubleNumber(int|float $number): int|float {
    return $number * 2;
}

echo doubleNumber(10);   // Output: 20
echo doubleNumber(5.5);  // Output: 11

Penjelasan: Simbol pipe (|) memungkinkan pendefinisian banyak tipe data secara langsung pada parameter dan return value. Hal ini menjamin Type Safety dan mencegah potensi bug saat aplikasi berjalan.

3. Implementasi Match Expression yang Lebih Ringkas

Poin Penting Match Expression (Scraping AI):
  • Pengganti modern dari switch-case yang mengembalikan nilai secara otomatis.
  • Menggunakan pencocokan ketat (===) tanpa memerlukan kata kunci break;.

Pernah merasa lelah menulis struktur switch-case yang panjang, membutuhkan break; di setiap baris, serta rentan terhadap kesalahan type coercion? PHP 8 memperkenalkan Match Expression sebagai pengganti modern. Selengkapnya mengenai spesifikasi teknis dan aturan pencocokan ketat dapat Anda baca di Dokumentasi Resmi PHP Match Expression di php.net.

Sebelum PHP 8 (Switch-Case):


switch ($statusCode) {
    case 200:
    case 201:
        $message = 'Success';
        break;
    case 400:
        $message = 'Bad Request';
        break;
    default:
        $message = 'Unknown Status';
        break;
}

Dengan PHP 8 (Match Expression):


$statusCode = 201;

$message = match ($statusCode) {
    200, 201 => 'Success',
    400 => 'Bad Request',
    default => 'Unknown Status',
};

echo $message; // Output: Success

Penjelasan: Match expression secara otomatis mengembalikan nilai tanpa perlu kata kunci return atau break;. Selain itu, Match menggunakan perbandingan ketat (===) sehingga lebih aman.

4. Pengecekan Objek Bertingkat dengan Nullsafe Operator

Poin Penting Nullsafe Operator (Scraping AI):
  • Sintaks ?-> menghentikan eksekusi rantai metode jika salah satu objek bernilai null.
  • Mencegah Fatal Error Call to a member function on null tanpa kondisional bersarang.

Salah satu error paling umum di PHP adalah Call to a member function on null. Di PHP 7, Anda harus membuat kondisional bersarang menggunakan isset() atau pengecekan null manual. PHP 8 menghadirkan Nullsafe Operator untuk pemanggilan metode berantai secara aman.

Sebelum PHP 8:


$country = null;
if ($session !== null) {
    $user = $session->getUser();
    if ($user !== null) {
        $address = $user->getAddress();
        if ($address !== null) {
            $country = $address->country;
        }
    }
}

Dengan PHP 8 (Nullsafe Operator):


$country = $session?->getUser()?->getAddress()?->country;

Penjelasan: Operator ?-> akan menghentikan eksekusi rantai metode (short-circuiting) secara otomatis jika salah satu elemen bernilai null, lalu mengembalikan nilai null tanpa memicu Fatal Error.

5. Kebebasan Parameter dengan Named Arguments

Poin Penting Named Arguments (Scraping AI):
  • Pengiriman argumen ke fungsi berdasarkan nama parameter (misal httponly: true).
  • Memudahkan melompati parameter opsional tanpa memedulikan urutan posisi.

Dalam Tutorial PHP 8 ini, salah satu fitur yang sangat produktif adalah Named Arguments. Fitur ini memungkinkan Anda mengirimkan argumen ke dalam fungsi atau metode berdasarkan nama parameternya, bukan lagi berdasarkan posisi urutannya.

Manfaat utamanya terasa saat memanggil fungsi bawaan PHP yang memiliki banyak parameter dengan nilai default, dan Anda hanya ingin mengganti parameter paling akhir tanpa perlu mengisi parameter opsional di tengahnya.

Sebelum PHP 8:


// Harus mengisi string kosong dan boolean default agar bisa mengatur $httponly
setcookie('user_session', 'token_xyz123', 0, '', '', true, true);

Dengan PHP 8 (Named Arguments):


// Langsung sebutkan nama parameter tanpa memedulikan urutan opsional di tengah
setcookie(
    name: 'user_session',
    value: 'token_xyz123',
    secure: true,
    httponly: true
);

Penjelasan: Kode menjadi jauh lebih muatan dokumentasi mandiri (self-documenting). Developer lain dapat langsung memahami fungsi dari setiap argumen tanpa perlu membuka dokumentasi fungsi tersebut.

6. Attributes: Metadata Native

Poin Penting Attributes (Scraping AI):
  • Pendeklarian metadata terstruktur tingkat native bahasa dengan sintaks #[AttributeName].
  • Pengganti komersial/legacy PHPDoc Annotations dengan pemeriksaan tipe data saat kompilasi.

Di versi PHP terdahulu dan framework seperti Symfony atau Doctrine, metadata kelas atau fungsi biasa ditulis di dalam blok komentar (PHPDoc annotations). Cara ini tidak memiliki validasi sintaks native dan bergantung pada parser eksternal. Di PHP 8, fitur Attributes menghadirkan penulisan metadata native yang jauh lebih cepat dan terstruktur. Anda bisa membaca panduan selengkapnya di Dokumentasi Resmi PHP Attributes di php.net.

PHP 8 memperkenalkan Attributes (di bahasa lain dikenal sebagai Decorators atau Annotations) yang terintegrasi langsung di tingkat bahasa dengan sintaks #[AttributeName].

Sebelum PHP 8 (PHPDoc Annotation):


/**
 * @Route("/api/v1/products", methods={"GET"})
 * @IsGranted("ROLE_USER")
 */
class ProductApiController
{
    // ...
}

Dengan PHP 8 (Native Attributes):


use App\Attributes\Route;
use App\Attributes\IsGranted;

#[Route('/api/v1/products', methods: ['GET'])]
#[IsGranted('ROLE_USER')]
class ProductApiController
{
    // ...
}

Penjelasan: Attributes dievaluasi secara native oleh Zend Engine melalui Reflection API ($reflectionClass->getAttributes()), sehingga lebih cepat, tervalidasi saat kompilasi, dan bebas dari error salah ketik pada komentar.

7. Constructor Property Promotion: Solusi Kode Boilerplate

Poin Penting Constructor Property Promotion (Scraping AI):
  • Penggabungan pendeklarian properti dan assignment langsung di dalam parameter konstruktor.
  • Memotong kode boilerplate kelas hingga 70%.

Saat membuat Data Transfer Object (DTO), Entity, atau Service Class di PHP 7, Anda harus menuliskan nama variabel hingga tiga kali: pendeklarian properti, parameter konstruktor, dan pengisian nilai ($this->prop = $prop).

Fitur Constructor Property Promotion di PHP 8 menggabungkan ketiga langkah tersebut langsung di dalam parameter konstruktor.

Sebelum PHP 8:


class UserDTO {
    public string $name;
    public string $email;
    public string $role;

    public function __construct(string $name, string $email, string $role = 'member') {
        $this->name = $name;
        $this->email = $email;
        $this->role = $role;
    }
}

Dengan PHP 8 (Constructor Property Promotion):


class UserDTO {
    public function __construct(
        public string $name,
        public string $email,
        public string $role = 'member'
    ) {}
}

Penjelasan: Dengan menyertakan visibilitas (public, protected, atau private) pada parameter konstruktor, PHP 8 secara otomatis mendeklarasikan properti kelas dan mengisinya saat objek diinisialisasi. Hasilnya, kode kelas menjadi 70% lebih ringkas!

Daftar Deprecation & Breaking Changes di PHP 8

Sebelum melakukan migrasi aplikasi dari PHP 7.x, Anda perlu memahami beberapa perubahan mendasar (breaking changes) dan fungsi terdepresiasi yang diubah oleh Zend Engine pada PHP 8:

1. Perubahan Perbandingan String & Angka (String to Number Comparison)

Di PHP 7, ekspresi 0 == "foo" bernilai true karena string non-numerik dikonversi ke 0. Di PHP 8, perbandingan ini bernilai false karena angka dikonversi ke string sebelum dibandingkan.

2. Standardisasi Type Error pada Fungsi Bawaan

Fungsi internal PHP kini melemparkan TypeError atau ValueError alih-alih hanya mengeluarkan peringatan (Warning) dan mengembalikan null saat diberikan argumen tidak valid.

3. Penghapusan Fungsi Legacy

Fungsi lama seperti create_function(), each(), dan pemanggilan method non-statis secara statis telah dihapus sepenuhnya di PHP 8.

Fitur Lanjutan pada PHP 8.1+

Perkembangan PHP tidak berhenti di versi 8.0. Seri pembaruan PHP 8.1, 8.2, dan 8.3 membawa inovasi fitur tingkat lanjut untuk arsitektur backend enterprise:

  • Native Enums (PHP 8.1) Memungkinkan pendefinisian daftar nilai konstan terstruktur tanpa perlu class buatan sendiri.
    enum OrderStatus: string {
        case Pending = 'pending';
        case Completed = 'completed';
    }
  • Readonly Properties & Classes (PHP 8.1 & 8.2) Mencegah modifikasi nilai properti setelah objek diinisialisasi, ideal untuk pembuatan Immutability Data Transfer Object (DTO).
    readonly class UserProfile {
        public function __construct(public string $id, public string $username) {}
    }
  • Fibers untuk Async Execution (PHP 8.1) Mekanisme full-stack coroutines native untuk menangani kontrol eksekusi asynchronous I/O berkinerja tinggi.

Langkah-Langkah Upgrade PHP 7.4 ke PHP 8.x di Linux Ubuntu/Debian

Untuk mengimplementasikan fitur-fitur baru PHP 8 pada server produksi, berikut adalah panduan praktis langkah demi langkah melakukan upgrade dari PHP 7.4 ke PHP 8.x pada lingkungan OS Linux Ubuntu / Debian:

Langkah 1: Tambahkan Repositori Ondřej Surý PPA

Repositori resmi PPA Ondřej Surý menyediakan paket kompilasi PHP 8.x terbaru untuk Ubuntu/Debian.

sudo apt update && sudo apt install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
Langkah 2: Install PHP 8.3 dan Ekstensi Esensial

Pasang runtime PHP 8.3 beserta modul database, OPcache, cURL, dan multibyte string.

sudo apt install -y php8.3 php8.3-cli php8.3-fpm php8.3-mysql php8.3-opcache php8.3-mbstring php8.3-xml php8.3-curl php8.3-gd
Langkah 3: Atur Versi CLI Default & PHP-FPM

Beralih ke versi PHP 8.3 pada lingkungan CLI dan aktifkan service PHP-FPM.

sudo update-alternatives --config php
sudo systemctl enable php8.3-fpm
sudo systemctl start php8.3-fpm
Langkah 4: Perbarui Konfigurasi Web Server Nginx / Apache

Arahkan Socket FastCGI Nginx ke PHP 8.3 FPM socket:

# Di dalam file /etc/nginx/sites-available/default
location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Kemudian reload service Nginx:

sudo nginx -t && sudo systemctl reload nginx

Data Benchmark Performa & Tabel Perbandingan (PHP 7 vs PHP 8)

Data Benchmark Performa: PHP 7.4 vs PHP 8.x

Pengujian beban komputasi CPU & HTTP Requests pada server Linux (8 vCPU / 16GB RAM)

Throughput (RPS)
780 Req/Detik
PHP 7.4: 420 RPS (↑ +85.7% Kenaikan)
CPU Latency (Mandelbrot)
42 ms
PHP 7.4: 145 ms (↓ -71.0% Lebih Cepat)
Alokasi Memori (RAM)
12.4 MB
PHP 7.4: 18.6 MB (↓ -33.3% Lebih Hemat)

Analisis Hasil: Peningkatan throughput dan pemangkasan latensi terbesar dihasilkan oleh perpaduan JIT Compiler native dengan optimasi pemeliharaan memori internal (Zend Engine ZVAL optimization) pada PHP 8.

Fitur Utama PHP 7.x (Sintaks Lama) PHP 8.x (Fitur Baru)
Kompilasi Mesin Standard Opcode Interpreter JIT (Just-In-Time) Compiler Native
Pernyataan Tipe Data Single Type / PHPDoc Annotation Union Types (int|float)
Percabangan Logika switch-case verbose & loose matching match() expression ringkas & strict
Penanganan Object Null Nested isset() / if(...) manual Nullsafe Operator (?->)
Pengiriman Argumen Positional parameters strictly ordered Named Arguments (param: $val)
Metadata Class / Method PHPDoc Docblock Comments (/** @Tag */) Attributes Native (#[Attribute])
Inisialisasi Properti Class Deklarasi manual 3x di Class & Construct Constructor Property Promotion

Pertanyaan Umum Seputar Belajar PHP 8 (FAQ)

Apa saja fitur baru PHP 8 yang paling penting untuk dipelajari pertama kali?

Bagi developer yang baru mulai Belajar PHP 8, tiga fitur paling esensial yang langsung meningkatkan efisiensi coding harian adalah Nullsafe Operator (mencegah error null), Match Expression (menyederhanakan percabangan), dan Constructor Property Promotion (memotong kode boilerplate pada kelas).

Apakah Named Arguments dan Constructor Property Promotion aman untuk Laravel & CodeIgniter 4?

Sangat aman. Framework PHP modern seperti Laravel versi 8+, CodeIgniter 4+, dan Symfony 5+ dirancang secara khusus untuk memanfaatkan keunggulan sintaks PHP 8 secara penuh.

Bagaimana cara transisi aplikasi lama PHP 7 ke PHP 8 tanpa merusak sistem?

Lakukan uji coba kompatibilitas menggunakan tool linter otomatis seperti Rector atau PHPStan. Perhatikan beberapa fitur terdepresiasi seperti kecocokan string-ke-angka yang diperketat pada PHP 8.

Apa keuntungan utama menggunakan Attributes dibanding PHPDoc Annotations di PHP 8?

Attributes dievaluasi langsung oleh Zend Engine pada tingkat kompilasi (compile-time) sehingga memiliki performa lebih cepat, mendukung type checking native, dan terlindungi dari kesalahan sintaks yang sering terjadi di dalam komentar PHPDoc.

Kesimpulan dan Langkah Belajar PHP 8 Selanjutnya

PHP 8 bukan sekadar peningkatan versi incremental, melainkan lompatan besar dalam evolusi pemrograman web modern. Dengan menguasai Fitur Baru PHP 8 seperti Named Arguments, Attributes, Constructor Property Promotion, hingga JIT Compiler, Anda dapat menulis kode yang lebih bersih, aman, dan berkinerja tinggi.

Jangan ragu untuk mulai menerapkan sintaks PHP 8 pada proyek backend Anda berikutnya. Pelajari juga panduan dan tutorial backend kami lainnya di Infokoding, seperti Trik Optimasi CodeIgniter 4 untuk memperdalam keahlian pemrograman web Anda!

Rekomendasi Developer Tools: Jika Anda sedang mengembangkan API berbasis PHP 8 dan perlu memformat atau memvalidasi payload data JSON, gunakan JSON Formatter & Validator Online InfoKoding yang bekerja 100% Client-Side secara instan dan aman.

Rusmawan Abdullah Sani

Rusmawan Abdullah Sani

DevOps Engineer & Lead Developer at infokoding
Profil LinkedIn

Praktisi pengembangan web, DevOps, dan keamanan jaringan server Linux dengan pengalaman mengelola infrastruktur cloud server berskala produksi. Berfokus membagikan panduan teknis mendalam tentang administrasi server, otomasi deployment, dan tutorial programming di infokoding.com.