ARTIKELS

PHP

Fitur Apa yang baru di PHP 8

02-12-2020 20:16:16 BY Alfikri Read 586x 5 min read

Hello klinik coders...

Taukah teman-teman semua dengan versi PHP terbaru ?.

Ya betul. Pada tanggal 26 November 2020 PHP 8 released. Tim pengembangan PHP mengumumkan ketersediaan langsung dari PHP 8.0.0.

PHP 8.0 hadir dengan banyak peningkatan dan fitur baru seperti:

  • Union Types
  • Named Arguments
  • Match Expressions
  • Attributes
  • Constructor Property Promotion
  • Nullsafe Operator
  • Weak Maps
  • Just In Time Compilation
  • Dan banyak lagi...

Wah, intinya banyak perubahan ya teman-teman. Untuk melihat perubahan tersebut kita bisa  bandingkan dengan PHP versi sebelumnya yaitu PHP 7

1. Union Types

PHP 7

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

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

new Number('NaN'); // Ok

PHP 8

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

new Number('NaN'); // TypeError

Anotasi pada PHPDoc untuk mengkombinasikan sebuah type, teman-teman dapat menggunakan deklarasi jenis yang divalidasi saat dijalankan.

2. Named Arguments

PHP 7

<?php
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);

PHP 8

<?php
htmlspecialchars($string, double_encode: false);

Disini, teman-teman hanya menentukan parameter apa saja yang dibutuhkan, lewati yang sifatnya opsional dan untuk argumen tidak bergantung pada perintah dan didokumentasikan.

3. Match expression

PHP 7

<?php
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

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

Untuk perintah "match" mirip dengan switch dan memiliki beberapa fitur berikut:

  • Match adalah ekspresi, artinya hasilnya dapat disimpan dalam variabel atau dikembalikan.
  • Match hanya mendukung ekspresi baris tunggal dan tidak butuh perintah "break".
  • Perintah "match" memiliki pembanding yang ketat.

4. Attributes

PHP 7

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

PHP 8

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

Pada anotasi PHPDoc, teman-teman sekarang dapat menggunakan metadata terstruktur dengan sintaks PHP Native.

5. Constructor property promotion

PHP 7

<?php
class Point {
    public float $x;
    public float $y;
    public float $z;

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

PHP 8

<?php
class Point {
    public function __construct(
      public float $= 0.0,
      public float $= 0.0,
      public float $= 0.0,
    ) {}
}


Kita tidak perlu menginisiasi variable diluar "__construct"

6. Nullsafe operator

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;

Saat cek kondisi "null", teman-teman sekarang dapat menggunakan rangkaian panggilan dengan operator "nullsafe". Ketika evaluasi satu elemen gagal, eksekusi seluruhnya akan dibatalkan dan bernilai nol.

7. Weak maps

Weak maps dibangun di atas RFC weakrefs yang ditambahkan di PHP 7.4, sekarang implementasi WeakMap ditambahkan di PHP 8 dan  menyimpan referensi ke objek.

Kita bisa ambil contoh dari ORM, cache akan menyimpan referensi ke kelas entitas untuk meningkatkan kinerja hubungan antar entitas. Objek entitas ini tidak dapat dikumpulkan garbagenya, selama cache ini memiliki referensi ke objek tersebut, meskipun cache adalah satu-satunya hal yang mereferensikannya.

Jika lapisan caching ini menggunakan referensi dan "weak maps", PHP akan mengumpulkan objek-objek ini saat tidak ada lagi yang mereferensikannya. Terutama dalam kasus ORM, yang dapat mengelola beberapa ratus, bahkan ribuan entitas dalam satu permintaan. Weak maps menawarkan cara yang lebih baik untuk menangani objek-objek ini.

Berikut kita contohkan "weak maps" :

<?php
class Foo
{
    private WeakMap $cache;

    public function getSomethingWithCaching(object $obj): object
    {
        return $this->cache[$obj]
            ??= $this->computeSomethingExpensive($obj);
    }
}

8. Just-In-Time compilation

PHP 8 memperkenalkan dua mesin kompilasi JIT. Menelusuri JIT, yang paling menjanjikan dari keduanya, menunjukkan kinerja sekitar 3 kali lebih baik pada tolok ukur sintetis dan peningkatan 1,5–2 kali pada beberapa aplikasi tertentu yang berjalan lama. Performa aplikasi pada umumnya setara dengan PHP 7.4. 

Untuk lebih jelas bisa kita lihat hasil perbandingannya pada gambar dibawah ini :


Sumber : https://www.php.net/releases/8.0/en.php

Sekian tutorial dari saya kali ini, mudah-mudahan bermanfaat dan jika ada kritik, saran dan pertanyaan silahkan berkomentar dibawah ini.

Let's Coding...

Tags #PHP8 #PHP

About author

Alfikri

Saya seorang web developer. Saya sangat suka tantangan untuk mempelejari hal-hal baru dalam dunia pemograman.



Comments

Scroll to Top