Memperkenalkan PHP 7.4: Kinerja, Fitur, Penghentian

Apa Arti PHP 7.4 untuk Anda?


PHP terus berkembang dan mereka baru saja merilis pembaruan terbaru PHP 7.4 mereka, penuh dengan fitur-fitur baru. Seperti yang telah kami buktikan pada rilis PHP 7 yang lalu - kinerja dan kecepatan terus meningkat. Salah satu fitur baru yang paling menarik adalah preloading . Ini mempercepat eksekusi skrip dan memperkenalkan kemampuan untuk memiliki kode yang lebih cepat dan lebih bersih karena garis kode yang disederhanakan.

Orang-orang yang bertanggung jawab atas PHP mempertimbangkan komentar dan permintaan audiens mereka dengan pertimbangan maksimal dan menjawabnya dengan sempurna. Sejak saat itu mereka terus mengubah kode menjadi lebih intuitif dan lebih nyaman untuk beralih antar bahasa pemrograman.

PHP digunakan di lebih dari 78,9% dari semua situs web. Menurut W3techs , situs yang paling populer menggunakan PHP adalah Wikipedia, Pinterest, dan Facebook.

Jika kita secara eksplisit melihat situs WordPress yang menjalankan PHP, membandingkan PHP 5 dan 7, kita dapat melihat peningkatan kecepatan ganda. Situs web bertenaga WordPress mendapatkan hasil maksimal dengan menggunakan versi PHP terbaru di luar sana.

gambar

Grafik ini menggambarkan kebenaran tentang situs web yang aktif menggunakan PHP. Apakah 40 juta. situs web yang cukup hidup untuk menarik perhatian Anda? Itulah berapa banyak yang menggunakan PHP sekarang. Selain itu, PHP 7.4 sudah menyajikan hasil tes yang lebih baik daripada PHP 7.3 dengan peningkatan kinerja dan peningkatan kualitas hidup lainnya.

Grafik di bawah ini menunjukkan tes benchmark keseluruhan pada versi PHP baru dan lama. Beberapa kriteria yang diuji antara lain kemudahan penggunaan, kecepatan, dan kinerja.

gambar

Apa yang Baru di PHP 7.4?


Sejak 2016, PHP7 telah merilis pembaruan tahunan tanpa gagal. Setiap tahun mereka menghadirkan fitur baru, tambahan, dan kemungkinan untuk menulis kode bersih yang membuat bahasa lebih andal dan ramah pengguna bagi mereka yang menjalankannya di situs web mereka.

Mari kita menggali dan melihat lebih dekat beberapa perubahan yang dibuat dengan penambahan PHP 7.4. Untuk daftar lengkap, lihat changelog mereka di sini .

Preloading


Mari kita bicara tentang kode. Saat menggunakan kerangka kerja atau pustaka, file-nya harus dimuat dan ditautkan pada setiap permintaan. Preloading adalah saat Anda dapat memuat kerangka kerja dan pustaka ke dalam OPCache. Hal ini memungkinkan server untuk memuat file PHP dan menyimpannya dalam memori selama startup dan membuatnya tersedia untuk setiap permintaan di masa depan. Bicara tentang membuat semuanya berjalan cepat!

Preloading dijalankan oleh arahan php.ini tertentu: opcache.preload . Ini memiliki kompiler skrip PHP dan dijalankan ketika server dijalankan. Itu juga dapat digunakan untuk memuat lebih banyak file dan memilih untuk memasukkan atau mengompilasinya.

Ini luar biasa. Namun, jika sumber file yang dimuat sebelumnya pernah berubah, server harus dihidupkan ulang. File yang dimuat sebelumnya juga tetap di-cache dalam memori OPCache selamanya.
Namun, file yang sudah dimuat ini akan terus tersedia untuk setiap permintaan di masa depan jika Anda perlu menggunakannya lagi.

Sebarkan Operator dalam Ekspresi Array


Kembali ketika PHP 5.6 dirilis, PHP mulai mendukung argumen membongkar (operator spread), tetapi sekarang, dengan 7.4, kita dapat menggunakan fitur ini dengan ekspresi array. Membongkar argumen adalah sintaks untuk membongkar array dan Traversables ke dalam daftar argumen. Dan, untuk melakukannya, itu hanya perlu diawali dengan ... (3 titik.) Itu saja.

Mari kita lihat contoh ini:

$animals = ['dog', 'cat']; $animalkingdom = ['lion', 'elephant', ...$animals, 'giraffe']; // ['lion', 'elephant', 'dog', 'cat', 'giraffe']; 

Kita sekarang dapat memperluas array dari mana saja yang kita inginkan dalam array lain, hanya dengan menggunakan sintaks Penyebar Operator.

Ini contoh yang lebih panjang:

 $num1 = [1, 2, 3]; $num2 = [...$num1]; // [1, 2, 3] $num3 = [0, ...$num1]; // [0, 1, 2, 3] $num4 = array(...$num1, ...$num2, 111); // [1, 2, 3, 1, 2, 3, 111] $num5 = [...$num1, ...$num1]; // [1, 2, 3, 1, 2, 3] 

Tidak hanya itu, tetapi Anda juga dapat menggunakannya dalam suatu fungsi. Lihat contoh ini:

 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] 

Selain itu, Anda sekarang dapat membongkar array dan generator yang dikembalikan oleh fungsi langsung ke array baru.

Contoh kode akan terlihat seperti ini:

 function getAnimals(){ return ['dog', 'cat', 'elephant']; } $num1 = [...getAnimals(), 'lion', 'tiger', 'giraffe']; 

Dan dengan PHP 7.4, itu akan mencetak:

 array(6) { [0]=> string(3) "dog" [1]=> string(3) "cat" [2]=> string(8) "elephant" [3]=> string(4) "lion" [4]=> string(5) "tiger" [5]=> string(7) "giraffe" } 

Dengan ekspresi array yang baru ini, operator spread harus memiliki kinerja yang jauh lebih baik daripada 7.3 array_merge. Ini karena operator spread adalah struktur bahasa sedangkan array_merge adalah fungsi. Juga karena operator spread mendukung objek yang mengimplementasikan traversable dan array_merge hanya mendukung array.

Beberapa hal penting yang perlu diperhatikan, Anda hanya dapat menggunakan array yang diindeks karena kunci string tidak didukung. Jika digunakan, kesalahan yang dapat dipulihkan akan dilemparkan pada layar, setelah kunci string ditemukan.
Manfaat lain yang mulia untuk 7.4 adalah penghapusan array_merge. Ucapkan selamat tinggal pada pergeseran indeks yang ditakuti!

Sebagai contoh, mari kita lihat penggabungan array panjang di bawah ini:

 $array = ['banana, 'orange']; $array[2] = 'orange'; $array[1] = 'apple'; //shifting var_dump($array); // prints array(3) { [0]=> string(6) "banana" [1]=> string(5) "apple" [2]=> string(6) "orange" 

Manfaat lain dari 7.4 adalah menggunakan fungsi generator. Fungsi generator berfungsi seperti fungsi normal, kecuali alih-alih mengembalikan nilai, fungsi generator menghasilkan nilai sebanyak yang diperlukan.

Lihat contoh kode di bawah ini:

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

Referensi yang lemah


Sekarang PHP 7.4 memiliki kelas WeakReference, yang tidak harus bingung dengan kelas WeakRed atau ekstensi Weakref .

WeakReferences membiarkan programmer mengingat referensi ke suatu objek. Ini berguna karena tidak mencegah objek dari kehancuran. Mereka bermanfaat untuk mengimplementasikan struktur seperti cache.

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

Parameter Contravariant dan Pengembalian Covarian


Saat ini, PHP menggunakan sebagian besar tipe parameter invarian dan tipe return. Artinya, jika suatu metode memiliki parameter atau tipe pengembalian X maka parameter subtipe atau tipe pengembalian juga harus tipe X.

Sekarang, dengan PHP 7.4 ia mengusulkan untuk memperbolehkan kovarian (dipesan dari spesifik ke generik) dan contravarian (membalik urutan) pada parameter dan tipe kembali.

Berikut adalah contoh keduanya:

Contoh tipe kembalinya kovarian:

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

Contoh tipe parameter contravarian:

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

Properti yang Diketik 2.0


Sejak PHP 5, petunjuk jenis telah menjadi fitur yang tersedia yang memungkinkan Anda menentukan jenis variabel yang diharapkan diteruskan ke fungsi atau kelas. Dalam migrasi PHP 7.2, penambahan tipe data objek memberi harapan bahwa lebih banyak akan tersedia di masa mendatang. Masa depan sekarang.

Di 7.4 yang baru, PHP dapat mendukung daftar jenis berikut:

 bool, int, float, string, array, object, iterable, self, parent any class or interface name ?type // where "type" may be any of the above 

Perhatikan bahwa tipe induk dapat digunakan di kelas dan tidak perlu memiliki induk yang konsisten dengan parameter dan tipe kembali.

Juga, perhatikan bahwa void dan callable tidak didukung. Void dihapus karena tidak berguna dan memiliki semantik yang tidak jelas; Callable , karena perilakunya tergantung pada konteks.

Mari kita lihat beberapa contoh lagi.

Ini adalah kelas, ditulis untuk PHP 7.3:

 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; } } 

Di PHP 7.4, tanpa mengorbankan keamanan jenis apa pun, sebuah kelas sekarang dapat ditulis sesederhana:

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

Berikut adalah beberapa contoh dari semua jenis 7.4 sekarang mendukung:

 class Example { public int $scalarType; protected ClassName $classType; private ?ClassName $nullableClassType; // Types are also legal on static properties public static iterable $staticProp; // Types can also be used with the "var" notation var bool $flag; // Typed properties may have default values (more below) public string $str = "foo"; public ?string $nullableStr = null; // The type applies to all properties in one declaration public float $x, $y; // equivalent to: public float $x; public float $y; } 

Fungsi Panah 2.0


Fungsi anonim di PHP cenderung bertele-tele dan panjang, bahkan ketika mereka hanya melakukan operasi sederhana. Ini sebagian karena sejumlah besar pelat sintaksis, dan sebagian karena kebutuhan untuk mengimpor variabel yang digunakan secara manual.

Ini membuat kode yang menggunakan penutupan sederhana membingungkan untuk dibaca dan bahkan lebih sulit untuk dipahami.

Mari kita lihat beberapa kode yang akan Anda gunakan dengan PHP 7.3:

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

Sekarang, inilah sintaks yang lebih ringkas dari PHP 7.4:

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

Karenanya, fungsi panah sekarang memiliki bentuk sederhana ini:

 fn(parameter_list) => expr 

Di bawah ini Anda dapat melihat contoh dua fungsi $ fn1 (7.3) dan $ fn2 (7.4) berdampingan. Mereka memiliki hasil yang sama tetapi terlihat berbeda:

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

Ini juga akan berfungsi jika fungsi panah bersarang:

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

Di sini fungsi luar menangkap $ z . Kemudian, fungsi dalam juga menangkap $ z dari fungsi luar. Dengan 7.4, lingkup luar bisa tersedia di fungsi dalam. Ini adalah sesuatu yang tidak bisa dilakukan oleh 7.3.

Sintaks fungsi panah memungkinkan untuk berbagai fungsi seperti, variadics, nilai default, parameter dan tipe kembali, serta by-reference meneruskan dan mengembalikan. Semuanya menjaga tampilan tetap bersih dan mudah dibaca. Di bawah ini semua fungsi panah yang valid sekarang tersedia:

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

Satu hal yang perlu diperhatikan adalah fungsi panah memiliki prioritas terendah. Lihat contohnya:

 fn($x) => $x + $y // is fn($x) => ($x + $y) // not (fn($x) => $x) + $y 

Pengusiran


Ada banyak penghentian yang terjadi dengan penggabungan ke 7.4. Daftar berikut adalah gambaran singkat dari fungsi yang ditargetkan untuk penghentian. Anda dapat menemukan penjelasan yang lebih rinci di sini :

  • Tipe asli
  • Sihir mengutip warisan
  • array_key_exists () dengan objek
  • Filter FILTER_SANITIZE_MAGIC_QUOTES
  • Metode ekspor refleksi ()
  • mb_strrpos () dengan penyandian sebagai argumen ke-3
  • implode () campuran pesanan parameter
  • Membatalkan ikatan $ this dari penutupan non-statis
  • fungsi hebrevc ()
  • fungsi convert_cyr_string ()
  • fungsi money_format ()
  • fungsi ezmlm_hash ()
  • fungsi r estore_include_path ()
  • allow_url_include ini directiv

Beberapa yang penting untuk diperhatikan adalah penghentian dua langkah berikut.

Mengubah Prioritas Operator Rangkaian


Saat ini prioritas operator '.', '+' Dan '-' semuanya sama. Kombinasi dari operator ini hanya akan diselesaikan dari kiri ke kanan.

Mari kita lihat kode ini di PHP 7.3:

 echo "sum: " . $a + $b; // would be evaluated left-to-right echo ("sum: " . $a) + $b; // could also look like this 

Dengan PHP 7.4, '+' dan '-' akan didahulukan dari '.' jadi penambahan dan pengurangan akan selalu dilakukan sebelum string. Ini akan terlihat seperti berikut:

 echo "sum: " . $a + $b; // would be executed as if the code were as follows. echo "sum :" . ($a + $b); 

Proposal dua langkah ini bertujuan untuk mengurangi kesalahan dan lebih naluriah. PHP 7.4 saat ini sedang dalam tahap pertama dengan pemberitahuan penghentian ekspresi '+', '-' dan '. Sambil menunggu pemilihan akhir / perubahan terjadi di PHP 8.

Operator Ternary Kiri-Asosiatif


Tidak seperti kebanyakan bahasa lain, operator ternary di PHP adalah asosiatif kiri daripada asosiatif kanan. Tidak hanya tidak biasa, itu juga membingungkan bagi programmer yang beralih di antara berbagai bahasa. PHP 7.4 mengusulkan untuk menghapus asosiasi-kiri dan membutuhkan penggunaan tanda kurung.

Mari kita lihat kode di bawah ini:

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

Dalam sebagian besar bahasa lain itu akan ditafsirkan sebagai:

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

Sementara di PHP, alih-alih ditafsirkan sebagai:

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

Ini dapat menyebabkan kesalahan karena umumnya bukan itu yang dimaksudkan.

Melalui proposal dua langkah yang terpisah, PHP 7.4 telah menerapkan penggunaan kurung secara eksplisit sebagai peringatan penghentian dan mudah-mudahan akan melakukan kesalahan runtime kompilasi di versi mendatang.

Kesimpulan


Tepat saat liburan, PHP 7.4 menghadirkan fitur-fitur baru dan peningkatan kualitas hidup untuk semua pengembang PHP.

Situs web WordPress pasti akan mendapat manfaat dari peningkatan ini dan penggunanya dapat mengharapkan waktu eksekusi yang lebih cepat dan penggunaan memori yang lebih sedikit saat menggunakan PHP 7.4 dibandingkan dengan versi sebelumnya.

Dengan penambahan deklarasi tipe properti kelas satu dan tiping tipe, fungsi penggabungan panah, dan kecepatan yang jauh lebih baik, 7.4 pasti akan meningkatkan kecepatan dan kualitas alur kerja Anda.

Source: https://habr.com/ru/post/id483128/


All Articles