Aldwin Nayoan Aldwin is a content writer at Niagahoster. Specializing in web hosting and WordPress, he is eager to help people uplevel their business on the internet. Apart from being a tech junkie, Aldwin likes fiction and photography.

Yuk Mengenal PHP 7.4: Fitur-Fitur Baru dan Keunggulannya

6 min read

Featured image PHP 7.4

PHP 7.4 telah diluncurkan pada 28 November kemarin. Dibandingkan para pendahulunya, versi terbaru dari bahasa pemrograman ini membuat website Anda lebih cepat, aman, dan powerful. Mari kenali semua fitur baru dan kelebihannya!

Apa Saja yang Baru di PHP 7.4?

PHP 7.4 memang merupakan pembaharuan kecil untuk versi 7 dari bahasa pemrograman ini. Namun, jangan salah sangka. Varian terbaru ini menawarkan performa yang lebih baik dan berbagai fitur baru:

  1. Preloading
  2. Spread Operator dalam Array Expression
  3. Generator Function
  4. Weak Reference
  5. Contravariant Parameter dan Covariant Return
  6. Null Coalescing Assignment Operator
  7. Typed Properties 2.0
  8. Arrow Functions 2.0

Sekarang mari bahas fitur-fitur tersebut secara lebih dalam!

1. Preloading

Pemrograman menggunakan framework atau library mengharuskan Anda untuk mengunggah dan menghubungkan masing-masing file dalam setiap request.

Berkat fitur preloading, Anda dapat mengunggah framework dan library ke dalam OPCache — yang memungkinkan “penyimpanan” file PHP dalam server. File-file tersebut kemudian akan di-compile dan dijalankan secara otomatis untuk setiap request yang membutuhkannya. Praktis, bukan?

Untuk menentukan file apa saja yang ingin di-preload dan dijalankan secara otomatis, Anda perlu mengulik salah satu perintah dalam file php.ini, yakni opcache.preload. Namun, perlu diingat bahwa perubahan file yang telah di-preload mengharuskan Anda untuk restart server.

2. Spread Operator dalam Array Expression

Argument unpacking atau spread operator, syntax yang digunakan untuk menjabarkan array dan traversable menjadi argument list, telah ada sejak PHP 5.6. Akan tetapi, versi 7.4 memungkinkan Anda untuk menggunakannya dengan array expression. Anda hanya perlu menambahkan tiga titik di depan spread operator untuk menggunakannya.

Agar lebih jelas, perhatikanlah contoh di bawah ini:

$hewan = ['anjing', 'kucing'];
$kerajaanhewan = ['singa', 'gajah', ...$hewan, 'jerapah'];
// [‘singa’, ‘gajah’, ‘anjing’, ‘kucing’, ‘jerapah’]; 

Pada contoh tersebut, $hewan dapat dijabarkan dalam array lain dengan menambahkan tiga titik di depannya. Selain itu, Anda juga dapat menggunakan spread operator dalam sebuah function, seperti pada contoh berikut:

function getNum() {
  return ['a', 'b'];
}
$num6 = [...getNum(), 'c']; // ['a', 'b', 'c']
$num7 = [...new NumIterator(['a', 'b', 'c'])]; // ['a', 'b', 'c']
function arrGen() {
    for($i = 11; $i < 15; $i++) {
        yield $i;
    }
}
$num8 = [...arrGen()]; // [11, 12, 13, 14] 

Ditambah lagi, Anda bisa langsung  menjabarkan array dan generator yang dikembalikan oleh sebuah function di dalam array lainnya. Contohnya seperti di bawah ini:

function getHewan(){
 return ['anjing', 'kucing', 'gajah'];
}
$num1 = [...getHewan(), 'singa', 'harimau', 'jerapah']; 

Berikut adalah hasil dari function tersebut jika di-compile dengan PHP 7.4:

array(6) {
 [0]=>
 string(3) "anjing"
 [1]=>
 string(3) "kucing"
 [2]=>
 string(8) "gajah"
 [3]=>
 string(4) "singa"
 [4]=>
 string(5) "harimau"
 [5]=>
 string(7) "jerapah"
} 

Dengan adanya syntax spread operator dalam array expression, fitur array_merge milik PHP 7.3 sudah tidak dibutuhkan lagi.

3.Generator Function

Generator function berfungsi layaknya function biasa. Namun, ia dapat menyimpan value sebanyak-banyaknya. Di bawah ini adalah contohnya:

function generator() {
 for ($i = 3; $i <= 5; $i++) {
 yield $i;
 }
}
$num1 = [0, 1, 2, ...generator()]; 

4. WeakReference

Class WeakReference memungkinkan Anda untuk mempertahankan reference dari sebuah object. Fitur ini berguna dalam penerapan struktur yang menyerupai cache. Contohnya seperti berikut ini:

WeakReference {
/* Methods */
public __construct ( void )
public static create ( object $referent ) : WeakReference
public get ( void ) : ?object
} 

5. Contravariant Parameter dan Covariant Return

Selama ini PHP menggunakan invariant parameter dan return. Artinya, jika parameter atau return dari sebuah method adalah X, subtype parameter atau return-nya juga harus X.

Akan tetapi, PHP 7.4 menghadirkan covariant (dari spesifik ke umum) dan contravariant (dari umum ke spesifik) parameter dan return. Berikut adalah contoh penggunaan keduanya.

Covariant return:

interface Factory {
 function make(): object;
}
class UserFactory implements Factory {
 function make(): User;
}  

Contravariant parameter:

interface Concatable {
 function concat(Iterator $input); 
}
class Collection implements Concatable {
 // accepts all iterables, not just Iterator
 function concat(iterable $input) {/* . . . */}
} 

6. Null Coalescing Assignment Operator

Coalesce operator ?? bermanfaat ketika Anda menggunakan ternary operator dengan isset(). Operator ini akan mengembalikan operand pertama. Jika operand pertama bersifat null, operand kedualah yang akan dikembalikan. Agar lebih jelas, perhatikanlah contoh berikut ini:

$username = $_GET['user'] ?? ‘nobody';

Meskipun baris kode tersebut terlihat sederhana, implementasinya akan menjadi rumit ketika Anda memasukkan variabel yang panjang, seperti pada contoh di bawah ini:

$this->request->data['comments']['user_id'] = $this->request->data['comments']['user_id'] ?? 'value';

Kabar baiknya, di PHP 7.4 Anda dapat mempersingkat kode di atas dengan null coalescing assignment operator yang direpresentasikan dengan simbol ??=. Dengan operator ini, kode diatas dapat dipersingkat menjadi demikian:

$this->request->data['comments']['user_id'] ??= ‘value’;

7. Typed Properties 2.0

Argument type declaration atau type hint memungkinkan Anda untuk tipe variabel yang ingin diteruskan ke sebuah function atau class method. Fitur ini sudah ada sejak PHP 5, tetapi ditingkatkan di PHP 7.4 dengan first class property type declaration.

Fitur ini mendukung semua tipe variabel, termasuk bool, int, float, string, array, object, iterable, self, parent, dan nullable type. Akan tetapi, void dan callable tidak didukung oleh typed properties karena memiliki semantik yang kurang jelas.

Penggunaan typed properties dapat mempersingkat waktu yang Anda butuhkan untuk menulis kode. Perhatikan perbandingan penulisan kode untuk class pada contoh di bawah ini.

class User {
    /** @var int $id */
    private $id;
    /** @var string $name */
    private $name;
    public function __construct(int $id, string $name) {
        $this->id = $id;
        $this->name = $name;
    }
    public function getId(): int {
        return $this->id;
    }
    public function setId(int $id): void {
        $this->id = $id;
    }
    public function getName(): string {
        return $this->name;
    }
    public function setName(string $name): void {
        $this->name = $name;
    }
} 

Kode di atas ditulis dengan PHP 7.3. Panjang bukan? Sekarang bandingkan dengan kode di bawah ini yang ditulis dengan PHP 7.4.

class User {
    public int $id;
    public string $name;
    public function __construct(int $id, string $name) {
        $this->id = $id;
        $this->name = $name;
    }
} 

Dengan typed properties, Anda juga dapat menentukan property value. Namun, perlu Anda ingat bahwa property value harus sesuai dengan property type. Selain itu, null value hanya bisa dimiliki oleh null property. Jika tidak, Anda akan menemui fatal error. Coba perhatikan contoh berikut ini:

class User {
public int $id;
public string $name;
}

$user = new User;
$user->id = 10;
$user->name = [];

Pada contoh tersebut, property type yang ditentukan adalah string. Padahal, property value-nya adalah array. Karena itu, error seperti di bawah ini akan muncul:

Fatal error: Uncaught TypeError: Typed property User::$name must be string, array used in /app/types.php:9

8. Arrow Functions 2.0

Anonymous function dalam PHP umumnya terdiri dari barisan-barisan kode yang panjang, bahkan untuk pengoperasian yang sederhana. Untuk mengatasi masalah tersebut, diciptakanlah arrow function.

Untuk melihat betapa berfungsinya fitur ini, mari perhatikan contoh-contoh berikut. Di bawah ini adalah kode yang ditulis dengan PHP 7.3:

function array_values_from_keys($arr, $keys) {
    return array_map(function ($x) use ($arr) { return $arr[$x]; }, $keys);
} 

Dengan PHP 7.4, kodenya akan terlihat seperti demikian:

function array_values_from_keys($arr, $keys) {
    return array_map(fn($x) => $arr[$x], $keys);
} 

Dengan arrow function, kodenya dapat lebih dipersingkat lagi:

fn(parameter_list) => expr

Berikut kami tampilkan contoh lain, di mana $fn1 ditulis dengan PHP 7.3 dan $fn2 ditulis dengan PHP 7.4.

$y = 1;
$fn1 = fn($x) => $x + $y;
$fn2 = function ($x) use ($y) 
{
    return $x + $y;
};

Dengan arrow function, kode di atas menjadi:

$z = 1;
$fn = fn($x) => fn($y) => $x * $y + $z;

Arrow function mendukung berbagai jenis function, termasuk variadics, default values, parameter types dan return types, serta by-reference passing dan returning. Berikut adalah arrow function untuk function-function tersebut:

fn(array $x) => $x;
fn(): int => $x;
fn($x = 42) => $x;
fn(&$x) => $x;
fn&($x) => $x;
fn($x, ...$rest) => $rest;

Di samping itu, arrow function adalah function yang paling tidak diutamakan dalam sebuah operasi. Jika Anda menuliskan fn($x) => $x + $y, pengoperasian yang didahulukan adalah $x + $y, bukan fn($x) => $x.

Fitur-Fitur Usang di PHP 7.4

Dengan dirilisnya PHP 7.4, banyak fitur dari versi-versi pendahulu yang sudah usang. Fitur-fitur tersebut akan ditinggalkan karena sudah memiliki pengganti yang lebih efisien. Berikut adalah beberapa di antaranya:

  • Tipe variabel real
  • array_key_exists() dengan object
  • Filter FILTER_SANITIZE_MAGIC_QUOTES
  • mb_strrpos() dengan encoding sebagai argument ketiga
  • implode() parameter order mix
  • Melepaskan $this dari non-static closures
  • Function hebrevc()
  • Function convert_cyr_string()
  • Function money_format()
  • Function ezmlm_hash()
  • Function restore_include_path()

Jika ingin mengetahui seluruh fitur yang akan ditinggalkan pada PHP 7.4, Anda dapat membacanya di sini.

Selain yang ada dalam daftar di atas, ada dua fitur penting yang berubah di PHP 7.4:

  • Hierarki operator dalam operasi penggabungan
  • Left-associative ternary operator

Hierarki Operator dalam Operasi Penggabungan

Sebelumnya, operator ‘.’, ‘+’, dan ‘-’ memiliki hierarki yang sama. Oleh karena itu, operasi yang menggunakan ketiga operator tersebut akan dijalankan dari kiri ke kanan.

Namun, ‘+’ dan ‘-’ didahulukan dari ‘.’ di PHP 7.4. Dengan kata lain, operasi penambahan dan pengurangan akan selalu didahulukan.

Dalam echo “sum: ” . $a + $b;, misalnya, $a + $b akan dilakukan terlebih dahulu.

Left-Associative Ternary Operator

Berbeda dengan bahasa pemrograman lainnya, ternary operator di PHP bersifat left-associative. Hal ini menimbulkan kebingungan bagi developer yang sudah terbiasa dengan ternary operator yang bersifat right-associative.

Kabar baiknya, PHP 7.4 meninggalkan sifat tersebut dan mengharuskan penggunaan tanda kurung untuk memperjelas pengoperasian. Untuk memahami konsep baru ini, mari perhatikan contoh berikut:

return $a == 1 ? 'one'
      : $a == 2 ? 'two'
      : $a == 3 ? 'three'
      : $a == 4 ? 'four'
                : 'other'; 

Dalam bahasa pemrograman lain, kode di atas diinterpretasikan sebagai berikut:

return $a == 1 ? 'one'
      : ($a == 2 ? 'two'
      : ($a == 3 ? 'three'
      : ($a == 4 ? 'four'
                : 'other')))

Dalam versi PHP terdahulu, interpretasinya seperti demikian:

return ((($a == 1 ? 'one'
      : $a == 2) ? 'two'
      : $a == 3) ? 'three'
      : $a == 4) ? 'four'
                : 'other';

Interpretasi di atas tentunya tidak sesuai dengan maksud sebenarnya dari kode tersebut. Oleh karena itulah PHP akan menggunakan right-associative ternary operator mulai versi 7.4.

Niagahoster Sudah Mendukung PHP 7.4

Seluruh server hosting Niagahoster sudah mendukung PHP 7.4. Untuk memeriksa apakah Anda sudah menggunakan versi PHP terbaru, masuklah ke akun cPanel Anda.

Selanjutnya, klik menu Select PHP Version yang ada dalam kolom Software. Anda juga bisa mengetikkan nama menu tersebut pada search bar di bagian atas halaman agar lebih mudah.

PHP 7.4 - halaman utama cPanel

Klik menu drop down pada bagian PHP Version. Jika Anda belum menggunakan versi PHP terbaru seperti pada contoh di bawah ini, klik 7.4.

PHP 7.4 - PHP Selector cPanel

Perubahan pengaturan ini langsung tersimpan secara otomatis. Setelah mengganti versi PHP ke 7.4, Anda dapat menutup halaman cPanel.

Penutup

Demikianlah semua fitur baru yang hadir di PHP 7.4. Semoga artikel ini bermanfaat bagi Anda. Jika memiliki pertanyaan, jangan sungkan untuk meninggalkan pertanyaan Anda pada kolom komentar yang tersedia. Jangan lupa juga subscribe untuk mendapatkan informasi seputar Cloud VPS Hosting dan WordPress tutorial dari kami.

6
Aldwin Nayoan Aldwin is a content writer at Niagahoster. Specializing in web hosting and WordPress, he is eager to help people uplevel their business on the internet. Apart from being a tech junkie, Aldwin likes fiction and photography.

Leave a Reply

Your email address will not be published. Required fields are marked *

four × 4 =

[{"code":""
[{"code":""
"label":"Coba Lagi"
"label":"Coba Lagi"
"win":false}
"win":false}
{"code":"HOSTING50"
{"code":"HOSTING50"
"label":"Extra Diskon 50rb "
"label":"Extra Diskon 50rb "
"win":true}
"win":true}
{"code":"HOSTING20"
{"code":"HOSTING20"
"label":"Extra Diskon 20rb "
"label":"Extra Diskon 20rb "
"win":true}
"win":true}
{"code":"HOSTING100"
{"code":"HOSTING100"
"label":"Extra Diskon 100rb "
"label":"Extra Diskon 100rb "
"win":true}
"win":true}
{"code":""
{"code":""
"label":"Belum Beruntung"
"label":"Belum Beruntung"
"win":false}
"win":false}
{"code":"HOSTING20"
{"code":"HOSTING20"
"label":"Extra Diskon 20rb "
"label":"Extra Diskon 20rb "
"win":true}
"win":true}
{"code":""
{"code":""
"label":"Coba Lagi"
"label":"Coba Lagi"
"win":false}
"win":false}
{"code":"HOSTING50"
{"code":"HOSTING50"
"label":"Extra Diskon 50rb "
"label":"Extra Diskon 50rb "
"win":true}
"win":true}
{"code":"HOSTING20"
{"code":"HOSTING20"
"label":"Extra Diskon 20rb "
"label":"Extra Diskon 20rb "
"win":true}
"win":true}
{"code":"FREESHIPPING"
{"code":"FREESHIPPING"
"label":"Coba Lagi"
"label":"Coba Lagi"
"win":false}
"win":false}
{"code":""
{"code":""
"label":"Sedikit Lagi! "
"label":"Sedikit Lagi! "
"win":false}
"win":false}
{"code":"HOSTING50"
{"code":"HOSTING50"
"label":"Extra Diskon 50rb "
"label":"Extra Diskon 50rb "
"win":true}]
"win":true}]