Home » PHP » PHP 8 Rilis : Kenalan Dengan Fitur Utama Barunya

PHP 8 Rilis : Kenalan Dengan Fitur Utama Barunya

by Hanifah Nurbaeti
by Hanifah Nurbaeti

PHP merupakan bahasa yang sampai saat ini masih termasuk bahasa pemrograman yang cukup populer di kalangan para developer. Kesederhanaan dan kedinamisan yang ditawarkan oleh PHP adalah beberapa faktor dibalik kepopulerannya hingga saat ini. PHP sendiri banyak digunakan untuk beberapa framework seperti CI, Laravel, Symfony, Yii dll.

Bahasa pemrograman PHP juga cocok untuk para pemula, karena selain kesederhanaan dan kedinamisannya yang ditawarkan, bahasa pemrograman ini juga memiliki bahasa pemrograman yang cukup mudah di mengerti. Masih banyak sekali forum-forum diskusi dan komunitas PHP yang membahas segala hal terkait PHP, termasuk jika kodingan kita mendapat error ataupun update terbaru dari PHP.

Seiring berkembangnya zaman maka, bahasa pemrograman ini juga semakin canggih. Terbukti di tanggal 26 November 2020 kemarin PHP merilis versi terbaru yaitu PHP 8. PHP 8 ini memiliki banyak fitur baru yang cukup signifikan dibandingan versi sebelumnya. Kita yang menggunakan PHP cukup mengetahui jika PHP merilis versi terbaru itu pasti sangat signifikan dan biasanya updatenya juga tidak terlalu cepat, seperti pada perubahan dari PHP 5 hingga 7.

Kali ini kita akan membahas beberapa fitur baru yang membuat PHP 8 memilki perubahan yang sangat signifikan. Di bawah ini akan dijelaskan perubahan yang ada dari PHP 7 ke PHP 8 berdasarkan dokumentasi dari web PHP nya langsung:

1. Fitur Named Arguments

Named Arguments adalah nama yang kita berikan pada sebuah argument yang kita buat ketika kita memanggil sebuah function. Berikut ini fungsi yang dapat dilakukan named arguments:

  • Fitur ini dapat menentukan hanya parameter yang diperlukan dan melewati parameter opsional
  • Fitur ini tidak perlu memikirkan urutan dan dapat didokumentasikan sendiri

Contoh

PHP 7

<?php
  function createCar(string $jenis,string $merk,string $warna=null, int $plat){
}
echo createCar('Kijang','Hyundai',null,7792);
?>

PHP 8

<?php
  function createCar(string $jenis,string $merk,string $warna=null, int $plat){
}
echo createCar(jenis:'Kijang', merk:'Hyundai', plat:7792);
?>

Berbeda bukan? Pada PHP 8 jika ada opsional parameter maka akan langsung di lewat/skip. Kita jadi bisa membuat syntax lebih ringkas dan mudah. Syntax ini mirip Javascript object.

2. Attributes

Attributes biasa digunakan oleh para developer yang jika ada suatu kelas yang ingin kita beri identitas yang isinya bisa apa saja lalu diberi komentar. Komentar ini biasanya disebut dengan Docblok atau syntax PHPDoc. Dengan menggunakan PHP 8, developer kini dapat menggunakan metadata terstruktur dengan syntax asli PHP daripada anotasi PHPDoc atau Docblok.

Contoh

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) { /* ... */ }
}

3. Constructor property promotion

Constructor property promotion adalah sebuah class yang di dalamnya terdapat atribut- atribut yang diinisialisasi dengan menggunakan constract. Pada PHP 8 constructor property promotion ini menyederhanakan proses yang biasanya dilakukan secara berulang ulang.

Contoh

PHP 7

<?php
Class Mobil {
  private $jenis;
  private $warna;
  private $merk;
  private $plat;

public function __construct(string $jenis,string $warna,string $merk, int $plat){
   $this->jenis = $jenis;
   $this->warna = $warna;
   $this->merk = $merk;
   $this->plat = $plat;
}
public function Cetak(){
 return "Mobil ini berjenis {this->jenis} bermerk {this->merk} yang memiliki {this->warna} dan {this->plat}" ;
}
}
$carOne = new Car('Kijang','Hyundai','Putih',8873);
echo $carOne->Cetak();
?>

PHP 8

<?php
Class Mobil{
  public function __construct(
  private string $jenis,
  private string $warna,
  private string $merk,
  private  int $plat,
)
{
}
public function Cetak(){
 return "Mobil ini berjenis {this->jenis} bermerk {this->merk} yang memiliki {this->warna} dan {this->plat}" ;
}
}
$carOne = new Car('Kijang','Hyundai','Putih',8873);
echo $carOne->Cetak();
?>

4. Union Types

Union Types adalah sebuah sebuah dua tipe data yang dapat di satukan atau penyatuan. Penyatuan ini dapat menerima return value dari beberapa jenis yang berbeda tidak hanya satu. Pada PHP 7 Union Types ditulis dengan menggunakan docbloc dan di simpan pada komenar untuk menghasilkan return valuenya, pada PHP 8 kita bisa langsung menggunakannya di dalam properti atau methodnya.

Contoh

PHP 7

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

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

new Number('09'); // output : 09
new Number (15); // Output 15
?>

PHP 8

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

new Number('09'); // Output : Error
new Number(10); // Output : 10
?>

Pada PHP 7 new Number('09'); masih dapat di baca atau di return valuenya padahal '09' in bukanlah tipe data integer atau float tetapi merupakan tipe string. Pada PHP 8 hal itu tidak terjadi, jadi langsung terdeteksi tipenya dahulu jika bukan tipenya maka akan tampil error.

5. Match Expression

Match expression ini merupakan sebuah ekspresi perbandingan yang baru pada PHP 8. Match expression ini kegunaannya mirip seperti switch hanya saja match expression dapat ditulis lebih singkat. Berikut ini beberapa perbedan match expression dengan switch :

  • Match expression dapat menyimpan hasilnya atau mengembalikannya.
  • Match expression hanya mendukung ekspresi tunggal dan tidak membutuhkan break, hanya statement.
  • Match expression memiliki strict comparisons(perbandingan yang ketat).

Contoh

PHP 7

<?php
switch ($number){
  case 1:
    echo 'Pilihan pertama';
  break;
  case 2:
    echo 'Pilihan kedua';
  break;
  case 3:
    echo 'Pilihan ketiga';
  break;
  case 4:
    echo 'Pilihan keempat';
  break;
  case 5:
    echo 'Pilihan kelima';
  break;
  default:
    echo 'Tidak ada pilihan';
  break;
    
$number = '3'; // Output : Pilihan ketiga
$number = 5 ; // Output : pilihan kelima
    
}
?>

PHP 8

<?php
echo match($number) {
1 => 'Pilihan pertama',
2 => 'Pilihan kedua',
3 => 'Pilihan ketiga',
4 => 'Pilihan keempat',
5 => 'Pilihan kelima',
default => 'Tidak ada pilihan'
}; 

$number = '3'; // Output : Error
$number = 2 ; // Output : pilihan kedua
?>

Pada PHP 7 ketika menggunakan switch, output yang dihasilkan akan mengacu kepada valuenya meskipin bukan tipe datanya, seperti contoh di atas ketika kita memasukkan $number = '3' outputnya tetap ‘Pilihan ketiga’. Padahal jelas-jelas tipe data yang di masukkan ke $number = ‘3’ adalah string bukan integer. Berbeda halnya dengan PHP 8 yang ketika kita memasukkan tipe data yang berbeda maka akan tampil error jika kita memasukkan tipe data yang sama maka akan tampil outputnya.

6. Nullsafe Operator

Nullsafe Operator merupakan sebuah method yang return valuenya adalah sebuah class. Nullsafe operator ini digunakan untuk melakukan pengecekan coding apakah ada nilai yang null atau tidak. Sebelumnya ketika kita akan melakukan itu kita akan memberikan validasi null dengan kode is_null dengan beberapa baris kode. Pada PHP 8 kita dapat meringkas hal tersebut menjadi satu baris.

Contoh

PHP 7

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

PHP 8

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

Pada PHP 7 kita akan melakukan pengecekan kondisi null dengan cara is_null atau null untuk memastikan variabel atau method tersebut adalah null. Pada PHP 8 kita dapat melakukan pemanggian operator (?->) atau yang disebut dengan pemanggilan berantai yang ketika satu elemen dalam rantai atau pengecekan adalah null maka eksekusi akan dibatalkan dan seluruh rantai bernilai null.

7. Saner String To Number Comparisons 

Saner string to number comparisons merupakan sebuah perbandingan antara string dan nuber yang lebih waras atau lebih masuk akal.

Contoh

PHP 7

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

PHP 8

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

Terlihat pada PHP 7 bahwa 0 yang merupakan integer sama dengan ‘0’ yang merupakan string akan menghasikan output true padahal keduanya merupakan tipe data yang sama. Tetapi pada PHP 8 sudah dibenarkan jika kondisi tersebut dimasukkan maka akan menghasilkan output false.

8. Consistent Type Errors For Internal Functions

Consistent type errors for internal functions adalah tampilan error pada browser saat ada kesalahan pada kodingan kita. Pada PHP 8 tampilan error diperbaiki menjadi lebih konsisten dan jelas kesalahannya ada di mana.

Contoh

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

Pada PHP 8 kita dapat mengetahui statement mana yang salah dan cara memperbaikinya. Pada PHP 7 program berhenti dan akan diberikan Warning : ... sedangkan pada PHP 8 kita akan diberikan letak kesalahannya seperti TypeError: ... atau ValueError: ... . Hal ini dapat mempermudah kita sebagai pengguna PHP untuk mendebug aplikasi kita.

9. Just-In-Time Compilation

Just-In-Time compilation merupakan sebuah compiler atau kompilasi sebuah kode. PHP ini menginterpretasikan kodenya baris per baris tidak melakukan kopilasi. Pada PHP 8 akhirnya PHP mengkompilasi kodenya agar dapat melakukan kinerja yang lebih cepat dibandingkan versi sebelumnya, karena jika hanya mengandalkan interpreter saja untuk saat ini sudah tidak efisien.

Just-In TIme compilation ini merupakan sebuah kemajuan yang cukup signifikan untuk PHP karena bahasa pemrogramana lain sudah cukup banyak yang menggunakan ini. Jika sebelumnya PHP tidak cocok untuk sebuah aplikasi yang kompleks, sekararang mungkin PHP 8 dapat digunakan untuk aplikasi yang kompleks karena memiliki Just-In-Time compilation.

Nah, itulah beberapa fitur utama yang ditawarkan oleh PHP 8. Intinya PHP 8 menawarkan penulisan skrip yang lebih ringkas, sederhana dan jelas serta kinerja yang lebih cepat dibandingkan pendahulunya seperti PHP versi 7.0 hingga 7.4. Masih ada beberapa hal baru yang ditawarkan oleh PHP 8, seperti :

  1. Type system and error handling improvements
  2. Other syntax tweaks and improvements
  3. New Classes, Interfaces, and Functions

Sekian pembahasan fitur utama yang baru dari PHP 8. Kamu bisa baca lebih banyak mengenai dokumentasinya di website resmi PHP nya langsung. Semoga bermanfaat.

You may also like