Ikhtisar fitur PHP7 favorit saya


Ketika orang mendiskusikan perubahan dalam PHP7, hal paling umum yang Anda dengar adalah mesin yang ditingkatkan secara signifikan, yang menawarkan kecepatan eksekusi lebih cepat dan memori yang jauh lebih sedikit ketika membandingkan aplikasi PHP umum seperti Drupal, WordPress, dan MediaWiki.


Jangan salah paham, ini tentu saja hebat! Saya berhasil memigrasi beberapa aplikasi CodeIgniter lama ke PHP7 dan mencapai kinerja yang jauh lebih baik dengan beberapa perubahan pada basis kode. Namun, PHP7 juga menambahkan beberapa fitur baru yang dapat membantu mengoptimalkan kode yang ada atau meningkatkan kualitas penulisan kode baru. Di sini saya telah menguraikan beberapa fitur yang saya pilih.


Parameter skalar dan mengembalikan tipe yang dideklarasikan


PHP memiliki jenis deklarasi hingga versi 7, tetapi hanya terbatas pada objek dan array. PHP7 sekarang menyediakan dukungan untuk semua jenis skalar dan menawarkan dua tipe deklarasi yang berbeda.


Terpaksa:


itu adalah tipe deklarasi default dan hanya berarti bahwa runtime PHP akan mencoba untuk memberikan nilai ketika diperlukan. Ambil, misalnya, kode berikut.


<?php function reverseString(String $str) : String { return strrev($str); } print(reverseString(1234)); 

Kami menunjukkan bahwa parameter $str harus bertipe String dan bahwa nilai balik juga harus bertipe String . Oleh karena itu, ketika kita melewati angka 1234, itu secara paksa diterjemahkan ke string "1234" dan diterjemahkan tanpa kesalahan.


Ketat:


Tipe kedua, ketat, diaktifkan menggunakan bendera yang ditambahkan di awal setiap file. Ketika dinyalakan, interpreter tidak melemparkan tipe, seperti pada contoh di atas, ia merespons dengan kesalahan dan menghentikan skrip.


 <?PHP declare(strict_types = 1); function reverseString(String $str): String { return strrev($str); } print (reverseString(1234)); 

Menambahkan pernyataan pernyataan tunggal di awal file, dalam kode yang sama seperti sebelumnya, sekarang kita mendapatkan pesan kesalahan berikut:


Kesalahan fatal: Uncaught TypeError: Argumen 1 diteruskan ke reverseString () harus dari tipe string, integer diberikan

Tambahan kecil: ketika Anda mengaktifkan mode ketat, ini juga berlaku untuk fungsi bawaan dan fungsi PHP yang dimuat dari ekstensi.


Operator Null ??


Tidak seperti beberapa bahasa, di mana Anda dapat menggunakan nama variabel sebagai ekspresi dalam ekspresi if dan dengan aman mengasumsikan bahwa jika nilai tidak didefinisikan atau kosong, maka nilainya akan false , PHP akan melempar kesalahan tentang variabel yang tidak ditentukan, indeks, dll. Ini membuatnya sangat verbose, kode biasa menggunakan if dibandingkan bahasa lain, seperti dalam contoh berikut.


  <?php if(!isset($_GET['key'])) { $key = 'default-value'; } else { $key = $_GET['key']; } 

Bahkan ketika menggunakan operator ternary, fungsi isset diperlukan. Dengan operator nol yang baru ?? Anda dapat sangat memfasilitasi kode:


  <?PHP $key = $_GET['key'] ?? 'default_value'; 

Penggunaan ini bahkan lebih efisien dalam merantai kasus yang memerlukan satu atau lebih if lainnya.


  <?php if (isset($_GET['key']) { $key = $_GET['key']; } else if(isset($_POST['key'])) { $key = $_POST['key']; } else { $key = 'default value'; } // Versus $key = $_GET['key'] ?? $_POST['key'] ?? 'default value'; 

Sedikit tambahan: Jika Anda bekerja dengan JavaScript, Anda dapat melakukan hal-hal seperti ini:


 const value = 0 || false || 'hello'; console.log(value); // hello 

Ini tidak akan berfungsi dalam PHP, dan kode PHP yang setara akan menetapkan nilai ke 0, karena operator baru hanya bekerja dengan nilai null .


Deklarasi Penggunaan Grup


Di versi PHP sebelumnya, Anda hanya bisa mengimpor satu elemen (kelas, fungsi, konstan) dari namespace tertentu dalam satu ekspresi menggunakan deklarasi penggunaan. Ini sering menyebabkan kode yang sangat berulang, seperti pada contoh di bawah ini.


 <?php use VendorName/LibraryName/ClasName1; use VendorName/LibraryName/ClasName2; use VendorName/LibraryName/ClasName3; 

Saat pengelompokan, yang di atas dapat disingkat, seperti yang ditunjukkan pada contoh di bawah ini, yang memungkinkan Anda untuk mendapatkan kode yang lebih bersih dan lebih intuitif dari apa yang diimpor dan dari mana.


 <?php use VendorName/LibraryName/{ClasName1, ClassName2. ClassName3}; 

Array konstan


Konstanta bernama adalah alat yang sangat berharga dalam PHP. Salah satu kasus penggunaan umum adalah untuk meningkatkan pembacaan kode dengan memberikan nama semantik untuk data sewenang-wenang, seperti warna, nilai RGB, atau angka ajaib dalam kode yang ambigu dan dapat membingungkan dalam kasus lain.
Siapa pun yang telah bekerja dengan PHP untuk waktu yang lama kemungkinan besar telah melihat aplikasi dengan file konstan (atau bahkan beberapa file) yang berisi lusinan, jika bukan ratusan konstanta bernama, yang membutuhkan nama panjang dan deskriptif untuk menghindari konflik nama.


 <?php define('COLOR_RED', '#f44141'); define('COLOR_BLUE', '#4286f4'); define('COLOR_GREEN', '#1ae01e'); define('COLOR_PURPLE', '#f309f7'); define('COLOR_ORANGE', '#ef7700'); 

Konstanta bernama, selain tipe data yang didukung sebelumnya, dapat berupa indeks atau array asosiatif. Ini akan membantu mengelompokkan lebih banyak konstanta bernama yang mungkin Anda miliki dalam aplikasi Anda.


 <?php //     define('COLORS', [ 'red' => '#f44141', 'blue' => '#4286f4', 'green' => '#1ae01e', 'purple' => '#f309f7', 'orange' => '#ef7700', ]); echo(COLORS['red']); // #f44141 //    define('COLORS', [ 'red', 'blue', 'green', 'purple', 'orange', ]); echo(COLORS[0]); // 'red' 

Kesimpulan


Ada beberapa fitur baru yang hebat yang belum saya sebutkan, seperti kelas anonim dan operator pesawat ruang angkasa. Jadi pasti lihat dokumentasi PHP.net untuk informasi lebih lanjut. Terima kasih telah meluangkan waktu untuk membaca semua ini dan silakan tinggalkan pertanyaan atau komentar di bawah ini.


terima kasih berez atas komentarnya.

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


All Articles