Apa Saja Keunggulan dan Fitur Barunya? [Terlengkap]


PHP 8 telah diluncurkan pada 26 November 2020 lalu. Dibandingkan pendahulunya, versi terbaru bahasa pemrograman ini lebih lengkap, baik itu secara fitur, performa, dan perbaikan pada error. 

Apa itu PHP 8? Apa saja fitur barunya? Nah, di artikel ini kami akan menjelaskannya secara lengkap. Yuk simak artikel ini sampai selesai!

Apa itu PHP 8?

PHP 8 adalah pembaruan dari PHP 7.4 yang akan berhenti active supportnya pada November 2021. Berbeda dengan PHP 7.4 yang hanya minor update, PHP 8 adalah sebuah major update dari bahasa pemrograman PHP

Apa arti dari sebuah major update? Jadi, versi terbaru ini menawarkan performa yang lebih baik dengan adanya berbagai fitur baru. Beberapa fitur unggulannya adalah Just In Time Compiler, Weak Maps, dan Named Arguments.

Penasaran ingin tahu fitur selengkapnya dan berbagai kelebihannya? Mari bahas fitur-fitur PHP 8 secara lebih lengkap!

10+ Fitur PHP 8 dan Keunggulannya

Berikut ini adalah fitur-fitur baru pada PHP 8 yang tentunya akan memudahkan pekerjaan Anda: 

1. JIT (Just In Time) Compiler

JIT Compiler merupakan teknik untuk meningkatkan kinerja program yang diinterpretasikan. Sebab sebelum program dijalankan, JIT Compiler sudah mengkompilasi program menjadi kode bahasa mesin. 

Dengan teknik JIT Compiler, eksekusi kode pun menjadi jauh lebih cepat dibanding interpreter PHP versi sebelumnya. Bagaimana proses interpretasinya?

cara kerja compiler versi terdahulu

Pada compiler PHP sebelumnya, interpreter akan melakukan proses mengurai, mengkompilasi dan eksekusi kode. Proses itu dilakukan berulang kali setiap ada request skrip. Hal itu menyebabkan pemborosan ruang CPU.

Namun JIT Compiler PHP 8 memiliki kode mesin aktual yang dapat bekerjasama dengan OPCache. Jadi, saat ada request terhadap skrip dan cache sudah tersedia di OPCache, skrip itu akan langsung diteruskan ke CPU untuk dikompilasi. 

cara kerja Just In Time

Selain itu, JIT Compiler PHP 8 memiliki dua mesin kompilasi JIT, yaitu function dan tracing. JIT berbasis function akan mengoptimalkan kode hanya dalam satu fungsi lingkup saja. Sedangkan, JIT berbasis tracing mengoptimalkan seluruh pelacakan dan pencarian kode. 

Ketika fitur JIT Compiler tersebut diaktifkan, fitur itu dapat meningkatkan kinerja aplikasi berbasis PHP sebesar 3-5%. Sedangkan performa aplikasi standar PHP akan meningkat 3 kali lebih cepat.

2. Weak Maps

Weak Maps adalah struktur data yang dapat menampung objek. Berbeda dengan Weak Reference pada PHP 7.4, Weak Maps juga dapat membersihkan cache dari objek yang tak direferensikan lagi. 

Dalam PHP, ketika ada variabel dari objek dihapus, maka akan ada pengecekan referensi ke objek tersebut. Kalo tidak ada variabel lain, itu artinya aman untuk menghapus objeknya.

Nah, dengan fitur Weak Maps pada PHP 8, proses penghapusan itu jadi lebih otomatis. Berikut ini contoh penggunaanya:

<?php
class ReviewList
{
    private WeakMap $cache;

    public function __construct()
    {
        $this->cache = new WeakMap();
    }

    public function getReviews(Product $prod): string
    {
        return $this->cache[$prod] ??= $this->findReviews($prod->id());
    }

    protected function findReviews(int $prodId): array
    {
        // ...
    }
}


$reviewList = new ReviewList();
$prod1 = getProduct(1);
$prod2 = getProduct(2);

$reviews_p1 = $reviewList->getReviews($prod1);
$reviews_p2 = $reviewList->getReviews($prod2);

// ...

$reviews_p1_again = $reviewList->getReviews($prod1);

unset($prod1);

Pada contoh di atas saat referensi ke Product1 tidak ada maka, referensi di $cache Weak Map langsung dihapus termasuk yang ada pada objek Review. Dengan cara ini, penggunaan memori jadi lebih efisien karena proses caching dilakukan tanpa tambahan logic lain seperti destructor dan lainnya. 

3. Union Type

Union type adalah suatu nilai yang memiliki representasi sama di sebuah posisi dan  dapat menerima beberapa jenis variabel. Nah, karena PHP mendukung Union Type, Anda bisa mendeklarasikan variabel dalam beberapa tipe.

  • Type atau null, menggunakan sintaks khusus ?Type 
  • array atau Traversable, menggunakan tipe khusus iterable 

Pada PHP versi sebelumnya, jenis penyatuan arbitrer tidak didukung oleh bahasa itu. Sehingga programmer cenderung menggunakan anotasi PHPDoc sebagai solusi. 

Untungnya saat ini union type telah hadir secara native di PHP 8. Jadi, Anda tak perlu lagi menggunakan anotasi PHPDoc. Anda bisa menetapkan beberapa tipe parameter dengan sintaks T1|T2|… di semua posisi.

Ada beberapa keuntungan dari union type. Pertama, karena tipe nilai parameter yang bisa ditetapkan sendiri, Anda dapat menghindari kemungkinan terjadinya error dengan lebih baik. Kedua, informasi tipe yang kurang update pun bisa dihindari.

Inilah contoh perbandingan penggunaan union type di PHP:

PHP 7

class Number {
  /** @var int|float */
  private $number;

  /**
   * @param float|int $number
   */
  public function __construct($number) {
    $this->number = $number;
  }
}

new Number('NaN'); // Ok

PHP 8

class Number {
  public function __construct(
    private int|float $number
  ) {}
}

new Number('NaN'); // TypeError

Seperti contoh di atas, PHP 7 masih menggunakan anotasi PHPDoc sebagai berikut:

  /**
   * @param float|int $number
   */
  public function __construct($number) {
    $this->number = $number;
  }

Sedangkan, pada PHP 8 format sintaksnya lebih sederhana:

  public function __construct(
    private int|float $number
  ) {}

Dengan adanya fitur Union Type ini, penulisan sintaks menjadi lebih sederhana dan membuat deklarasi tipe lebih mudah dibaca. 

Baca Juga : PHP Editor Terbaik: Manakah Pilihan Anda untuk 2021?

4. Penggunaan ::Class For Objects

Pada versi sebelumnya, Anda harus menggunakan get_class() untuk menetapkan kelas ke objek. Namun pada PHP 8, Anda dapat menggunakan ::class to objects untuk memastikan kode sumber jadi lebih ramping. 

Agar lebih jelas, perhatikan contoh di bawah ini:

$object = new stdClass;
var_dump($object::class); // "stdClass"
$object = null;
var_dump($object::class); // TypeError

5. NullSafe Operator

Sebelumnya, untuk pengecekan nilai null di PHP 7 Anda perlu memasukkan kode is_null pada beberapa baris kode berulang kali. Di bawah ini adalah contohnya:

PHP 7

<?php
$user = get_user($id);
if (!is_null($user)) {
    $address = $user->getAddress();
    if (!is_null($address)) {
        $state = $address->state;
        If (!is_null($state)) {
            // And so on.
        }
    }
} }

Nah, dengan PHP 8 Anda bisa menggunakan fitur NullSafe Operator. Fitur ini memungkinkan Anda melakukan metode pemanggilan operator  ?-> untuk mengecek nilai null.

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

Artinya, dengan menggunakan fitur ini, Anda bisa mendeteksi null dalam suatu elemen rantai. Jika ditemukan null dalam rantai itu, maka proses eksekusi akan langsung dibatalkan. Misalnya seperti ini:

<?php

$bestSaleItem=$catalog?->getProducts(get_seasonal_type())?->mostPopular(10)[5];

Jika $catalog  adalah null, get_seasonable_type() tidak akan dipanggil. Seluruh rantai akan berhenti setelah mendeteksinya dan langsung menetapkan  $bestSaleItem ke null. 

6. Constructor Property Promotion

Fitur baru PHP 8 berikutnya adalah Constructor Property Promotion. Fitur ini berfungsi mengurangi penulisan atribut berulang pada class constructor. Di bawah ini adalah contohnya:

class Point {
  public function __construct(
    public float $x = 0.0,
    public float $y = 0.0,
    public float $z = 0.0,
  ) {}
}

Hal berbeda terjadi pada PHP 7 dimana semua properti harus diulang beberapa kali sebelum Anda dapat menggunakannya dengan objek. Contohnya seperti ini: 

class Point {
  public float $x;
  public float $y;
  public float $z;

  public function __construct(
    float $x = 0.0,
    float $y = 0.0,
    float $z = 0.0
  ) {
    $this->x = $x;
    $this->y = $y;
    $this->z = $z;
  }
}

Nah, dengan adanya fitur Constructor Property Promotion di PHP 8, penulisan atribut menjadi lebih pendek, lebih mudah dibaca dan tak terlalu rentan terhadap error. 

Namun fungsi ini hanya bisa digunakan pada promoted parameter seperti parameter yang diawali dengan public, protected, dan private.

7. Named Arguments

Pada versi PHP 7.4, Anda perlu memperhatikan urutan pemberian argumen untuk mengirimkan argumen ke sebuah fungsi. Namun pada PHP 8, Anda bisa mengirimkan argumen ke sebuah fungsi menggunakan nama pengenal. 

Misalnya saja jika ingin melakukan set nilai argumen ke-7 (http_only) pada PHP 7. Anda perlu mengirim nilai argumen sebelumnya. Hal ini karena argumen dibaca berdasarkan urutan. Sehingga Anda harus mengirim argumen ke-1 sampai ke-6.

setcookie(
    "Selamat datang",      // ---> 1
    "abc123",           // ---> 2
    time() + 3600,      // ---> 3
    "",                 // ---> 4
    "",                 // ---> 5
    false,              // ---> 6
    true                // ---> 7
);

Namun hal ini tidak berlaku untuk named arguments PHP 8. Argumen yang dikirimkan memiliki nama sehingga urutan argumen jadi tidak berpengaruh. Artinya, Anda hanya perlu menulis nilai yang ingin Anda ubah. 

setcookie(
    expires: time() + 3600,
    name: "selamat datang",
    value: "abc123",
    http_only: true
);

Dengan adanya Name Arguments pada PHP 8 ini, proses coding menjadi lebih mudah. Sebab identifier ketika argumen dikirim ke fungsi akan memperjelas pembacaan kode. Selain itu, kode bisa terdokumentasi secara mandiri. 

8. Match Expression 

PHP 8 memperkenalkan fitur Match Expression. Fitur ini mirip dengan Switch pada PHP 7. Bedanya, Match Expression memiliki sintaks yang lebih ringkas dan aman. 

Selain perbedaan utama tersebut, perbedaan lain antara Match dan Switch adalah sebagai berikut:

  • Match expression dapat mengembalikan value
  • Match expression hanya mendukung ekspresi tunggal dan tidak membutuhkan pernyataan break;
  • Match expression melakukan perbandingan yang sangat ketat

Contoh perbedaan Switch dan Match pada penggunaannya adalah sebagai berikut:

PHP 7

switch (8.0) {
  case '8.0':
    $result = "Oh no!";
    break;
  case 8.0:
    $result = "This is what I expected";
    break;
}
echo $result;
//> Oh no!

PHP 8

echo match (8.0) {
  '8.0' => "Oh no!",
   8.0  => "This is what I expected",
};
//> This is what I expected

Contoh penggunaan Switch di PHP 7 di atas menunjukan hasil output yang mengacu pada valuenya, meskipun bukan tipe datanya, yaitu “Oh no!”.

Sedangkan pada Match PHP 8, ketika Anda memasukkan type data yang sama maka akan memunculkan outputnya, yaitu “This is what I expected”. Ketika Anda memasukan type data berbeda, maka akan memunculkan pesan error.

9. Attributes

Attributes adalah cara untuk memberi keterangan informasi tambahan dan konfigurasi, sehingga dapat dibaca oleh mesin pada deklarasi dalam kode.

Pada versi sebelumnya, Anda melakukan dokumentasi parameter dan nilai menggunakan PHPDoc. Nah, fitur Attributes di PHP 8 memudahkan Anda untuk menggunakan metadata terstruktur dengan sintaks asli PHP. 

Berikut ini adalah perbandingannya:

PHP 7

class PostsController
{
    /**
     * @Route("/api/posts/{id}", methods={"GET"})
     */
    public function get($id) { /* ... */ }
}

PHP 8

class PostsController
{
    #[Route("/api/posts/{id}", methods: ["GET"])]
    public function get($id) { /* ... */ }

10. Numeric Strings

Pada versi sebelumnya, komparasi string dengan angka dilakukan dengan cara mengubah string ke angka. Kemudian baru melakukan komparasi antara integer atau float. Cara ini rentan bug atau masalah keamanan. 

Numeric Strings menjadikan PHP 8 lebih baik daripada versi sebelumnya. Sebab numeric strings mengubah string menjadi angka sebelum melakukan komparasi. Tujuannya untuk menghindari kesalahan komparasi. 

Alhasil, cara ini bisa memperbaiki bug atau masalah keamanan pada versi sebelumnya.

Baca Juga: 7 Tips PHP Security yang Wajib Anda Simak!

Berikut contoh perbandingan antara PHP 7 dan PHP 8  yang menunjukan hasil perbandingan sederhana:

PHP 7

<?php
0 == '0' // true
?>

PHP 8

<?php
0 == '0' // false
?>

Contoh PHP 7 menunjukan bahwa integer 0 (nol) sama dengan ‘0’. Artinya type itu adalah type string dengan output true. Sedangkan pada PHP 8, kondisi yang sama akan menghasilkan output false karena adanya type data yang berbeda.

11. Consistent type errors for internal functions

Saat Anda melakukan kesalahan pengiriman tipe, fungsi user defined dan internal akan mengirimkan pesan yang berbeda. Fungsi user defined mengirimkan pesan TypeError. Sedangkan fungsi internal mengirimkan beragam pesan berbeda. 

Hal ini mungkin membuat Anda kesulitan mengidentifikasi letak dan penyebab error atau kesalahan. Nah, PHP 8 menghadirkan solusinya dengan fitur consistent type errors for internal functions.

Fitur ini akan memunculkan pesan error dan letak error ketika ada kesalahan koding. Kesalahan ditunjukkan dengan TypeError : … atau ValueError : … .

Dengan adanya fitur ini, Anda dapat mengetahui letak error. Selain itu, Anda juga akan mengetahui cara memperbaiki error statement.

Berikut ini contoh penggunaan fitur ini:

PHP 7

strlen([]); // Warning: strlen() expects parameter 1 to be string, array given

array_chunk([], -1); // Warning: array_chunk(): Size parameter expected to be greater than 0

PHP 8

strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given

array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0

Seperti yang terlihat pada contoh di atas, pesan error yang muncul pada PHP 8 diperbaiki menjadi lebih konsisten untuk  semua jenis parameter yang tidak valid.

Niagahoster Sudah Mendukung PHP 8

Setelah mempelajari fitur di atas, Anda tentu jadi tahu keunggulan PHP 8 dibanding versi pendahulunya. Bagaimana? Anda jadi tak sabar menggunakan versi terbaru PHP ini? 

Tenang, seluruh server di Niagahoster kini sudah mendukung PHP 8. Hal ini tentu akan membuat website Anda tetap mutakhir, aman dan memiliki kinerja baik. 

Hanya saja, PHP 8 belum menjadi pengaturan bawaan server di Niagahoster. Alasannya, sebuah versi baru bisa saja belum diperlukan di beberapa website terkait kompatibilitasnya. 

Namun, jika Anda tertarik menggunakan PHP 8, Anda bisa langsung mengganti versi PHP melalui cPanel. Jangan lupa untuk melakukan langkah backup untuk menghindari kehilangan data.

Bagaimana cara mengubahnya?

Masuklah ke cPanel hosting Anda. Selanjutnya, geser ke bawah pada bagian Software dan pilih menu Select PHP Version

memilih PHP version di cPanel

Kemudian, klik drop down yang bertuliskan 7.4 (current) dan pilih versi 8.0 pada bagian current PHP version.

cara mengganti php7.4 ke php 8

Pengaturan ini akan otomatis tersimpan sehingga server Anda sudah akan menggunakan versi PHP 8. 

Apakah Anda Siap Beralih ke PHP 8?

PHP 8 menawarkan banyak fitur yang akan memudahkan pekerjaan Anda. Bukan hanya menawarkan penulisan skrip yang lebih ringkas dan jelas, kinerja website dengan PHP 8 diharapkan akan jauh lebih cepat. 

Beberapa fitur utama yang ditawarkan oleh PHP 8 beserta fungsinya adalah sebagai berikut:

  1. Just In Time Compiler –  meningkatkan kinerja program yang diinterpretasikan
  2. Weak Maps – membersihkan objek yang sudah tidak direferensikan
  3. Union Type – memungkinkan Anda mendeklarasikan variabel dalam beberapa tipe
  4. ::Class for Object – merampingkan kode sumber 
  5. NullSafe Operator – mendeteksi null dalam suatu elemen rantai
  6. Constructor Property Promotion – mengurangi penulisan atribut berulang
  7. Named Arguments – mengirimkan argumen ke sebuah fungsi menggunakan nama
  8. Match Expression – memiliki fungsi mirip Switch tapi dapat mengembalikan value 
  9. Attributes – memberi keterangan informasi tambahan dan konfigurasi, sehingga dapat dibaca oleh mesin pada deklarasi dalam kode
  10. Numeric Strings – mengubah string menjadi angka sebelum melakukan komparasi, sehingga komparasi lebih ketat dan minim error
  11. Consistent Type Errors for Internal Function – memunculkan pesan error dan letak error ketika ada kesalahan koding

Nah, kalau Anda sudah siap menggunakan PHP 8 untuk website Anda, tunggu apa lagi? Selamat mencoba!



Sumber

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Stay Connected

21,763FansLike
0FollowersFollow
0SubscribersSubscribe
- Advertisement -

Latest Articles