Wednesday, 22 September 2021

PHP 8: Apa Saja Keunggulan dan Fitur Barunya?

 

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?

logo 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 CompilerWeak Maps, dan Named Arguments.

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

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. 

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!

No comments:

Post a Comment

Self-talk dalam Psikologi

Self-talk dalam Psikologi Sempatkah kalian berdialog dengan diri sendiri? Dimana kala suara-suara kecil di kepala kalian mengisi benak kali...