Versi PHP menjadi sangat penting, untuk menjalankan aplikasi website yang Anda buat. Seringkali website gagal diakses, karena perbedaan versi php di hosting dengan versi php di script. Oleh karena itu dalam panduan ini, kami akan membagikan cara mengubah versi PHP di cPanel Show
Daftar isi Di layanan Shared hosting Rumahweb, kami menyediakan php versi 5. 2 sampai 8. 1. Mengubah versi php di cPanel dapat dilakukan melalui dua fitur yaitu MultiPHP Manage atau Select PHP Version Bagi yang belum mengetahui perbedaan kedua fitur tersebut, bisa membaca terlebih dahulu artikel berikut ini. Menggunakan Select PHP Version dan MultiPHP Manager cPanel Cara Mengubah versi PHP cPanelSeperti yang sudah dijelaskan sebelumnya, ada 2 cara untuk mengubah versi PHP di cPanel, yaitu melalui Select PHP version dan Multiphp Manager. Pilih Versi PHP digunakan, ketika Anda ingin melakukan Opsi PHP kustom. Sedangkan jika ingin menggunakan PHP Native, maka bisa menggunakan fitur MultiPHP Manager Berikut kami jelaskan cara mengubah versi PHP di cPanel Rumahweb Pilih Versi PHPAnda bisa memilih opsi ini, jika ingin melakukan custom PHP Option di Hosting. Langkah-langkahnya adalah sebagai berikut 1. Login ke cPanel, lalu pilih menu 'Select PHP version' 2. Pilih versi PHP yang akan digunakan, dengan mengklik pilihan yang tersedia pada bagian “Versi PHP”. 3. Jangan lupa klik set as current untuk menyimpan versi php yang Anda butuhkan Nonaktifkan Aktifkan Ekstensi PHPSelain ekstensi bawaan yang sudah terpasang di server, Anda juga bisa mengubah atau menonaktifkan/mengaktifkan ekstensi php sesuai kebutuhan. Untuk menonaktifkan/mengaktifkan extension php, silahkan klik menu Extensions seperti terlihat pada gambar berikut Setelah itu, akan muncul ekstensi php yang dapat Anda aktifkan atau nonaktifkan sesuai kebutuhan. Silakan centang untuk mengaktifkan, atau hapus centang untuk menonaktifkan ekstensi php di hosting Anda Kami merekomendasikan untuk mencentang sesuai dengan kebutuhan Anda saja. Jangan centang semua ekstensi, karena ini dapat menyebabkan php di hosting Anda menjadi error Jika ingin mereset extension PHP, silahkan klik tombol "Reset to default" untuk kembali ke server awal atau default Ubah Opsi PHPBagi anda yang ingin merubah nilai memory_limit, max_execution_time menjadi upload_max_filesize, anda bisa melakukannya melalui menu Options di Select php version Silahkan klik menu Options, kemudian sesuaikan nilai opsi php yang anda inginkan. Untuk penjelasan mengubah nilai opsi php, kami publikasikan secara terpisah melalui artikel berikut. Cara Mengatur Batas PHP cPanel Manajer MultiPHPAnda bisa memilih opsi ini, jika ingin menggunakan versi php yang berbeda di setiap domain. Misalnya dalam 1 hosting, Anda memiliki 2 website dengan persyaratan versi php yang berbeda. Anda dapat menggunakan opsi ini untuk mengatur versi php masing-masing Namun jika Anda ingin menggunakan opsi ini, pastikan status php di menu SelectPHP Version diatur ke "Native" Untuk mengubah versi php di MultiPHP Manager, Anda bisa mengikuti panduan berikut ini
Untuk memastikan versi php aktif di website, Anda bisa membuat file info php. Pelajari cara mengecek versi php melalui artikel berikut. Cara Mengecek Versi PHP yang Digunakan Itulah cara mengubah versi PHP di cPanel Rumahweb hosting. Jika masih ada kendala, silahkan hubungi bagian teknis kami melalui live chat, telepon, atau email ke technical[at]rumahweb. com. Semoga bermanfaat PHP 8. 1 adalah versi PHP baru yang dirilis November 2021. Versi ini hadir dengan fitur-fitur baru, peningkatan performa, dan perubahan yang akan membuka lebih banyak peluang bagi pengembang PHP untuk bekerja secara efisien dan lebih kreatif Ada lebih dari 20 fitur baru, banyak perubahan, dan beberapa penghentian dalam PHP 8. 1. Artikel ini akan membahasnya dan membantu Anda beralih dengan lancar dari PHP 8. 0 hingga PHP8. 1
Fitur Baru dan Upgrade di PHP 8. 1Versi PHP utama baru ini memperkenalkan lebih dari 20 fitur baru. Ingatlah bahwa mungkin ada perubahan setelah tanggal rilis yang dapat membuat daftar ini lebih panjang atau lebih pendek Berikut adalah beberapa fitur baru di PHP 8. 1 PencacahanPHP 8. 1 mendukung pencacahan, atau singkatnya enum. Ini adalah tipe data enumerasi yang terdiri dari sekumpulan nilai yang mungkin tetap Sintaks menggunakan enum untuk mendeklarasikan pencacahan, diikuti dengan nama yang ditentukan pengguna. Kemudian, diikuti dengan case untuk mendeklarasikan kemungkinan nilai. Pencacahan dapat memiliki sejumlah kasus, dari nol hingga sebanyak yang Anda butuhkan Pencacahan RFC menggunakan kartu remi standar untuk menjelaskan cara kerjanya. Ada empat setelan tetap – Spades, Hearts, Diamonds, dan Clubs. Anda dapat menghitung pakaian ini dengan enum di PHP enum Suit { case Spades; case Hearts; case Diamonds; case Clubs; } Sekarang, enum Suit memiliki empat kemungkinan nilai suit kartu. Anda dapat menggunakan fungsi dan menerapkan tipe saat menerima atau mengembalikan nilai setelan dengan sintaksis, misalnya, function count_and_iterate(Iterator&\Countable $value) { foreach($value as $val) {} count($value); }8 function pick_card(Suit $suit) {} pick_card(Suit::Spades); Pencacahan juga dapat berisi string opsional atau nilai int. Ini disebut Enum yang didukung, dan memiliki kriteria berikut
Misalkan kita ingin memberikan skor pada setelan di contoh sebelumnya. Kita bisa menggunakan sintaks ini enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’; SeratFitur baru ini memperkenalkan eksekusi bersamaan dalam pemrograman PHP. Namun, concurrent execution dalam PHP tidak berarti bahwa action dieksekusi pada waktu yang bersamaan Misalnya, ada titik di mana kode utama akan memulai serat. Kode di dalam serat akan dieksekusi secara terpisah di utas yang berbeda Juga, program utama tidak dapat menangguhkan atau mengakhiri serat. Hanya kode di dalam fiber yang dapat menangguhkan dirinya sendiri dan mengembalikan data apa pun ke program utama. Program utama, kemudian, dapat melanjutkan eksekusi Fiber dari titik penangguhan Tumpukan lengkap program PHP dengan serat bisa jadi rumit, tetapi berikut adalah contoh sederhana penggunaan serat dalam program Echo $fiber = new Fiber(function(): void { echo "Hello from the Fiber\n"; Fiber::suspend(); echo "Welcome back to the Fiber\n"; }); echo "Starting the program\n"; $fiber->start(); echo "Taken control back\n"; echo "Resuming Fiber\n"; $fiber->resume(); echo "Program ends\n";_ function redirect(string $url): never { header('Location: ' . $url); exit(); }3 adalah tempat serat akan menunda pelaksanaannya. Kemudian, ketika kode utama memanggil serat lagi dengan function redirect(string $url): never { header('Location: ' . $url); exit(); }4, serat akan mulai dari titik suspensi. Oleh karena itu, itu akan menggema Selamat datang kembali ke Fiber Inilah yang seharusnya terlihat seperti output Starting the program Hello from the Fiber Taken control back Resuming Fiber Welcome back to the Fiber Program ends Tipe Persimpangan MurniPHP 8. 1 mendukung tipe persimpangan yang memungkinkan mendeklarasikan beberapa tipe kelas untuk sebuah nilai. Sepintas, ini terdengar mirip dengan tipe gabungan yang diperkenalkan di PHP 8. 0. Namun, ada perbedaan yang signifikan Jenis serikat memungkinkan nilai untuk memenuhi salah satu jenis yang dinyatakan. Misalnya, jika string dan bilangan bulat dideklarasikan, nilainya dapat berupa string atau deklarasi Namun, tipe persimpangan murni hanya mengizinkan nilai yang memenuhi semua tipe yang dinyatakan. Inilah sebabnya mengapa tipe persimpangan murni hanya dapat menggunakan tipe kelas atau antarmuka, karena sebagian besar tipe standar seperti string dan integer tidak dapat dipenuhi secara bersamaan. Untuk mendeklarasikan tipe persimpangan murni di PHP 8. 1, gunakan operator & (DAN). Ini sebuah contoh function count_and_iterate(Iterator&\Countable $value) { foreach($value as $val) {} count($value); }_ function redirect(string $url): never { header('Location: ' . $url); exit(); }5 harus berupa objek yang mengimplementasikan antarmuka Iterator dan Countable. Jika tidak, itu akan menyebabkan kesalahan ketik tidak pernah Jenis PengembalianAda tipe baru yang tidak pernah kembali di PHP 8. 1. Ketika tipe pengembalian function redirect(string $url): never { header('Location: ' . $url); exit(); }_6 dideklarasikan dalam suatu fungsi, itu tidak akan mengembalikan nilai. Fungsi juga harus diakhiri dengan pernyataan keluar secara eksplisit atau implisit Berikut adalah contoh fungsi sederhana dengan tipe pengembalian function redirect(string $url): never { header('Location: ' . $url); exit(); }6 function redirect(string $url): never { header('Location: ' . $url); exit(); }_ Saat Anda menggunakan tipe pengembalian function redirect(string $url): never { header('Location: ' . $url); exit(); }6, sisa kode dalam program tidak akan dieksekusi atau mengembalikan nilai apa pun. Dalam penggunaan praktis, tipe tidak pernah kembali berguna untuk menunjukkan bahwa fungsi tidak akan mengeksekusi sisa kode dan akan menghentikan atau melempar Di satu sisi, tipe pengembalian function redirect(string $url): never { header('Location: ' . $url); exit(); }_6 mirip dengan tipe pengembalian array_is_list([]); array_is_list([1, 2, 3]); array_is_list([‘rock’, 2, 3]); array_is_list([‘rock’, scissor]); array_is_list([0 => 'rock', 'scissor']); array_is_list([0 => 'rock', 1 => 'scissor']);0. Namun, tipe pengembalian array_is_list([]); array_is_list([1, 2, 3]); array_is_list([‘rock’, 2, 3]); array_is_list([‘rock’, scissor]); array_is_list([0 => 'rock', 'scissor']); array_is_list([0 => 'rock', 1 => 'scissor']);_0 melanjutkan eksekusi setelah fungsi Tipe array_is_listFungsi array_is_list([]); array_is_list([1, 2, 3]); array_is_list([‘rock’, 2, 3]); array_is_list([‘rock’, scissor]); array_is_list([0 => 'rock', 'scissor']); array_is_list([0 => 'rock', 1 => 'scissor']);_2 baru di PHP 8. 1 membantu Anda melihat apakah array berisi entri yang berupa daftar. Ini akan memeriksa kunci array - jika berurutan, mulai dari nol, tidak memiliki celah, dan semua bilangan bulat, itu akan mengembalikan true. Ini juga akan mengembalikan true secara default untuk array kosong Misalnya, fungsi array_is_list([]); array_is_list([1, 2, 3]); array_is_list([‘rock’, 2, 3]); array_is_list([‘rock’, scissor]); array_is_list([0 => 'rock', 'scissor']); array_is_list([0 => 'rock', 1 => 'scissor']);_2 berikut ini akan mengembalikan nilai true array_is_list([]); array_is_list([1, 2, 3]); array_is_list([‘rock’, 2, 3]); array_is_list([‘rock’, scissor]); array_is_list([0 => 'rock', 'scissor']); array_is_list([0 => 'rock', 1 => 'scissor']); Sebaliknya, berikut adalah contoh fungsi array_is_list([]); array_is_list([1, 2, 3]); array_is_list([‘rock’, 2, 3]); array_is_list([‘rock’, scissor]); array_is_list([0 => 'rock', 'scissor']); array_is_list([0 => 'rock', 1 => 'scissor']);2 yang salah array_is_list([1 => 'rock', 'scissor']); // false, doesn’t start with 0 array_is_list([1 => 'rock', 0 => 'scissor']); // false, not in order array_is_list([0 => 'rock', 'suit' => 'paper']); false, non-integer keys array_is_list([0 => 'rock', 2 => 'paper']); false, non-sequential #[ReturnTypeWillChange] AtributAtribut baru ini menunjukkan ketidakcocokan jenis pengembalian tentatif yang seharusnya tidak menghasilkan pemberitahuan penghentian. Sebelum PHP 8. 0, sintaks atribut diuraikan sebagai komentar kode sehingga tidak menyebabkan kesalahan sintaks Penambahan atribut baru array_is_list([]); array_is_list([1, 2, 3]); array_is_list([‘rock’, 2, 3]); array_is_list([‘rock’, scissor]); array_is_list([0 => 'rock', 'scissor']); array_is_list([0 => 'rock', 1 => 'scissor']);_5 ke metode kelas di PHP 8. 1 versi tidak akan menimbulkan masalah - itu hanya akan mencegah pemberitahuan penghentian Ini adalah contoh array_is_list([]); array_is_list([1, 2, 3]); array_is_list([‘rock’, 2, 3]); array_is_list([‘rock’, scissor]); array_is_list([0 => 'rock', 'scissor']); array_is_list([0 => 'rock', 1 => 'scissor']);_5 dalam kode PHP class Sample implements ArrayAccess { #[\ReturnTypeWillChange] public function offsetGet(mixed $offset) {} // ... } Perhatikan bahwa atribut ini tidak akan berpengaruh lagi saat jenis pengembalian tentatif ditingkatkan ke jenis pengembalian standar readonlyPropertiesarray_is_list([]); array_is_list([1, 2, 3]); array_is_list([‘rock’, 2, 3]); array_is_list([‘rock’, scissor]); array_is_list([0 => 'rock', 'scissor']); array_is_list([0 => 'rock', 1 => 'scissor']);_7 adalah properti kelas baru di PHP 8. 1 dan hanya dapat diinisialisasi satu kali dari kelas tempatnya dideklarasikan. Kelas apa pun dengan properti ini tidak akan dapat dimodifikasi dan akan menghasilkan kesalahan jika Anda memaksanya untuk mengubah nilainya Berikut adalah contoh bagaimana Anda mendeklarasikan properti array_is_list([]); array_is_list([1, 2, 3]); array_is_list([‘rock’, 2, 3]); array_is_list([‘rock’, scissor]); array_is_list([0 => 'rock', 'scissor']); array_is_list([0 => 'rock', 1 => 'scissor']);7 di kelas function pick_card(Suit $suit) {} pick_card(Suit::Spades);0 Sekarang, karena array_is_list([]); array_is_list([1, 2, 3]); array_is_list([‘rock’, 2, 3]); array_is_list([‘rock’, scissor]); array_is_list([0 => 'rock', 'scissor']); array_is_list([0 => 'rock', 1 => 'scissor']);_7 telah diinisialisasi, Anda tidak dapat mengubah array_is_list([1 => 'rock', 'scissor']); // false, doesn’t start with 0 array_is_list([1 => 'rock', 0 => 'scissor']); // false, not in order array_is_list([0 => 'rock', 'suit' => 'paper']); false, non-integer keys array_is_list([0 => 'rock', 2 => 'paper']); false, non-sequential0 dalam kode Jika Anda mencoba memasukkan baris seperti ini function pick_card(Suit $suit) {} pick_card(Suit::Spades);1 Ini akan menghasilkan kesalahan ini function pick_card(Suit $suit) {} pick_card(Suit::Spades);2 Fungsi fsync() dan fdatasync()array_is_list([1 => 'rock', 'scissor']); // false, doesn’t start with 0 array_is_list([1 => 'rock', 0 => 'scissor']); // false, not in order array_is_list([0 => 'rock', 'suit' => 'paper']); false, non-integer keys array_is_list([0 => 'rock', 2 => 'paper']); false, non-sequential1 dan array_is_list([1 => 'rock', 'scissor']); // false, doesn’t start with 0 array_is_list([1 => 'rock', 0 => 'scissor']); // false, not in order array_is_list([0 => 'rock', 'suit' => 'paper']); false, non-integer keys array_is_list([0 => 'rock', 2 => 'paper']); false, non-sequential2 adalah tambahan baru untuk fungsi sistem file di PHP 8. 1. Mereka memiliki kemiripan dengan array_is_list([1 => 'rock', 'scissor']); // false, doesn’t start with 0 array_is_list([1 => 'rock', 0 => 'scissor']); // false, not in order array_is_list([0 => 'rock', 'suit' => 'paper']); false, non-integer keys array_is_list([0 => 'rock', 2 => 'paper']); false, non-sequential_3, yang digunakan untuk membilas buffer ke sistem operasi. Namun, array_is_list([1 => 'rock', 'scissor']); // false, doesn’t start with 0 array_is_list([1 => 'rock', 0 => 'scissor']); // false, not in order array_is_list([0 => 'rock', 'suit' => 'paper']); false, non-integer keys array_is_list([0 => 'rock', 2 => 'paper']); false, non-sequential1 dan array_is_list([1 => 'rock', 'scissor']); // false, doesn’t start with 0 array_is_list([1 => 'rock', 0 => 'scissor']); // false, not in order array_is_list([0 => 'rock', 'suit' => 'paper']); false, non-integer keys array_is_list([0 => 'rock', 2 => 'paper']); false, non-sequential2 menyiram buffer ke penyimpanan fisik Perbedaan utama di antara mereka adalah bahwa fungsi array_is_list([1 => 'rock', 'scissor']); // false, doesn’t start with 0 array_is_list([1 => 'rock', 0 => 'scissor']); // false, not in order array_is_list([0 => 'rock', 'suit' => 'paper']); false, non-integer keys array_is_list([0 => 'rock', 2 => 'paper']); false, non-sequential1 menyertakan metadata saat menyinkronkan perubahan file, sedangkan array_is_list([1 => 'rock', 'scissor']); // false, doesn’t start with 0 array_is_list([1 => 'rock', 0 => 'scissor']); // false, not in order array_is_list([0 => 'rock', 'suit' => 'paper']); false, non-integer keys array_is_list([0 => 'rock', 2 => 'paper']); false, non-sequential2 tidak Berikut adalah contoh fungsi array_is_list([1 => 'rock', 'scissor']); // false, doesn’t start with 0 array_is_list([1 => 'rock', 0 => 'scissor']); // false, not in order array_is_list([0 => 'rock', 'suit' => 'paper']); false, non-integer keys array_is_list([0 => 'rock', 2 => 'paper']); false, non-sequential_1 dalam sebuah kode function pick_card(Suit $suit) {} pick_card(Suit::Spades);_3 Anda dapat menggunakan array_is_list([1 => 'rock', 'scissor']); // false, doesn’t start with 0 array_is_list([1 => 'rock', 0 => 'scissor']); // false, not in order array_is_list([0 => 'rock', 'suit' => 'paper']); false, non-integer keys array_is_list([0 => 'rock', 2 => 'paper']); false, non-sequential1atau array_is_list([1 => 'rock', 'scissor']); // false, doesn’t start with 0 array_is_list([1 => 'rock', 0 => 'scissor']); // false, not in order array_is_list([0 => 'rock', 'suit' => 'paper']); false, non-integer keys array_is_list([0 => 'rock', 2 => 'paper']); false, non-sequential2 di baris 6. Saat fungsi dipanggil, sistem operasi diminta untuk menyiram data ke penyimpanan Fungsi ini berguna saat program membutuhkan penyimpanan data yang konsisten. Plus, itu memungkinkan untuk mengambil data jika aplikasi macet atau sistem gagal Fungsi Natrium XChaCha20Sodium adalah ekstensi PHP yang berisi pustaka kriptografi. Ini mendukung algoritme enkripsi XChaCha20, cipher aliran yang merupakan varian dari ChaCha20 Di PHP8. 1, tiga fungsi baru memungkinkan Anda mengenkripsi dan mendekripsi data menggunakan XChaCha20 tanpa autentikasi. Metode ini disebut mode terpisah, dan fungsinya adalah sebagai berikut
Bersamaan dengan fungsi baru, dua konstanta PHP baru didefinisikan di namespace global
baru di InisialisasiPHP 8. 1 sekarang memungkinkan penggunaan ekspresi baru untuk menginisialisasi nilai di dalam deklarasi fungsi Saat menggunakan PHP8. 0, kita harus menginisialisasi nilai untuk parameter opsional di luar konstruktor. Meskipun ini berfungsi dengan baik, ini membuat kode sedikit lebih panjang. Berikut adalah contoh dari RFC baru function pick_card(Suit $suit) {} pick_card(Suit::Spades);_4 Di PHP8. 1, kita cukup menulisnya seperti ini function pick_card(Suit $suit) {} pick_card(Suit::Spades);5 Dukungan Pembongkaran Array dengan Kunci-StringVersi PHP sebelumnya menambahkan dukungan untuk operator penyebaran array (...). Ini berfungsi untuk membongkar array dan sebagai alternatif dari fungsi class Sample implements ArrayAccess { #[\ReturnTypeWillChange] public function offsetGet(mixed $offset) {} // ... }4 Namun, operator spread digunakan untuk mendukung tombol numerik saja. Menggunakan operator atau fungsi untuk array dengan kunci string akan menghasilkan kesalahan PHP 8. 1 sekarang mendukung pembongkaran array untuk array dengan kunci string. Misalkan Anda memiliki array ini function pick_card(Suit $suit) {} pick_card(Suit::Spades);6 Anda dapat mengekstrak kunci array menggunakan operator spread function pick_card(Suit $suit) {} pick_card(Suit::Spades);7 Atau, bongkar kunci array menggunakan fungsi class Sample implements ArrayAccess { #[\ReturnTypeWillChange] public function offsetGet(mixed $offset) {} // ... }4 function pick_card(Suit $suit) {} pick_card(Suit::Spades);_8 Sintaks Callable kelas satuPHP 8. 1 memperkenalkan sintaks callable kelas pertama yang baru untuk membuat callable dari dalam lingkup saat ini Sebelum PHP 8. 1, sintaks untuk callable menggunakan class Sample implements ArrayAccess { #[\ReturnTypeWillChange] public function offsetGet(mixed $offset) {} // ... }6, seperti ini function pick_card(Suit $suit) {} pick_card(Suit::Spades);_9 Dengan sintaks baru, Anda dapat menggunakan class Sample implements ArrayAccess { #[\ReturnTypeWillChange] public function offsetGet(mixed $offset) {} // ... }7 setelah objek alih-alih menggunakan class Sample implements ArrayAccess { #[\ReturnTypeWillChange] public function offsetGet(mixed $offset) {} // ... }8. Ini membuatnya lebih mudah untuk membuat callable kelas satu. Berikut adalah contoh fungsi di atas menggunakan sintaks baru enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;0 Kelas IntlDatePatternGenerator BaruDi versi PHP sebelumnya, Anda dapat membuat tanggal dan waktu yang dilokalkan hanya dengan IntlDateFormatter yang telah ditentukan sebelumnya. Ada delapan format yang telah ditentukan sebelumnya – empat format dasar dan empat varian relatif yang menggunakan kemarin, hari ini, dan besok Meskipun ini adalah opsi yang masuk akal, ini tidak dapat disesuaikan seperti di PHP 8. 1 Kelas class Sample implements ArrayAccess { #[\ReturnTypeWillChange] public function offsetGet(mixed $offset) {} // ... }_9 yang baru memungkinkan Anda menentukan format untuk tanggal, bulan, dan waktu. Urutan persisnya sendiri dapat diserahkan kepada formatter Berikut adalah contoh penggunaannya dari RFC IntlDatePatternGenerator enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;1 Variabel kerangka menentukan format tanggal dan waktu YYYYMMDD, sedangkan formatter menentukan urutan akhir. Dari kode diatas, kita mendapatkan dua hasil yang berbeda dari formatter. Namun, tanggalnya tetap menggunakan format YYYYMMDD Konstanta Kelas akhirMendeklarasikan flag function pick_card(Suit $suit) {} pick_card(Suit::Spades);00 baru pada konstanta kelas mencegahnya ditimpa atau diperluas oleh sub-kelas Jika Anda mencoba memperluas atau mengganti kelas function pick_card(Suit $suit) {} pick_card(Suit::Spades);_00, itu akan mengakibatkan kesalahan fatal. Ini sebuah contoh enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;2 Itu akan menghasilkan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;3 Bendera ini tidak dapat digunakan untuk konstanta function pick_card(Suit $suit) {} pick_card(Suit::Spades);02 karena tidak dapat diakses di luar kelas. Mendeklarasikan konstanta function pick_card(Suit $suit) {} pick_card(Suit::Spades);00 dan function pick_card(Suit $suit) {} pick_card(Suit::Spades);02 bersamaan akan menghasilkan kesalahan fatal enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;4 Notasi Angka Oktal EksplisitPHP mendukung beberapa sistem angka, seperti default desimal (basis-10), biner (basis-2), oktal (basis-8), dan hex (basis-16). Namun, sistem angka selain desimal harus menggunakan awalan berikut
PHP 8. 1 memperkenalkan awalan o (huruf kecil) dan O (huruf besar) untuk angka oktal. Ini berarti angka oktal sekarang lebih jelas dan mudah dibaca Lihatlah contoh-contoh ini enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;5 Perhatikan bahwa awalan baru ini hanyalah tambahan. Awalan 0 yang ada akan bekerja dengan cara yang sama di PHP 8. 1 $_File. nilai full_path untuk Upload Direktorifunction pick_card(Suit $suit) {} pick_card(Suit::Spades);05 adalah variabel super global yang berisi nama, ukuran, dan tipe MIME dari file yang diunggah Di versi sebelumnya dari PHP 8. 1, function pick_card(Suit $suit) {} pick_card(Suit::Spades);_05 tidak menyimpan jalur relatif atau direktori yang tepat ke server. Oleh karena itu, Anda tidak dapat mengunggah seluruh direktori dengan formulir unggah file HTML Kunci function pick_card(Suit $suit) {} pick_card(Suit::Spades);_07 baru memecahkan masalah. Ini menyimpan jalur relatif dan merekonstruksi struktur direktori yang tepat di server, memungkinkan pengunggahan direktori enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;6 Ada dua file berbeda. txt dalam contoh di atas, tetapi disimpan di direktori yang berbeda. Jika Anda menggunakan array function pick_card(Suit $suit) {} pick_card(Suit::Spades);_08, akan ada entri duplikat, karena kedua file ditentukan dengan nama yang sama Namun, larik function pick_card(Suit $suit) {} pick_card(Suit::Spades);_09 berisi jalur untuk setiap file. Ini mencegah duplikasi yang terjadi pada array sebelumnya Pengodean dan Dukungan Lossless WebP untuk GdImageDi PHP8. 1, ada dukungan pengkodean WebP lossless baru untuk objek GdImage. Itu dapat diaktifkan menggunakan ekstensi GD dan libwebp versi 0. 2. 0 Konstanta PHP baru untuk mendeklarasikan pengkodean WebP lossless adalah function pick_card(Suit $suit) {} pick_card(Suit::Spades);10, bersama dengan fungsi function pick_card(Suit $suit) {} pick_card(Suit::Spades);11. Dalam kode PHP, tampilannya seperti ini enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;7 Dukungan Gambar AVIFSelain dukungan WebP, PHP 8. 1 – menggunakan ekstensi GD, juga mendukung format gambar AVIF. Ini adalah format gambar yang relatif baru, berdasarkan format video AV1. Ini memberikan kompresi yang lebih tinggi dan bebas royalti Untuk menambahkan dukungan gambar AVIF ke pemrosesan gambar PHP, Anda harus mengkompilasi ekstensi GD dengan dukungan AVIF. Anda juga membutuhkan libavid versi 0. 8. 2 atau lebih tinggi untuk ekstensi GD Tergantung pada sistem operasi Anda, jalankan perintah berikut
Langkah selanjutnya adalah menjalankan function pick_card(Suit $suit) {} pick_card(Suit::Spades);_14 dengan skrip function pick_card(Suit $suit) {} pick_card(Suit::Spades);15 untuk mengkompilasi PHP dengan dukungan AVIF enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_8 Kemudian, jalankan perintah berikut untuk menguji apakah dukungan AVIF sekarang diaktifkan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_9 Dukungan DNS-over-HTTPSDNS-over-HTTPS meningkatkan privasi dan keamanan dengan menjalankan resolusi DNS melalui protokol HTTPS. Ini mengenkripsi data yang dikirim oleh komputer klien ke DNS resolver Ekstensi Curl di PHP 8. 1 sekarang memungkinkan menentukan server untuk protokol DNS-over-HTTPS. Untuk menggunakan fitur baru ini, Anda perlu mengkompilasi PHP dengan libcurl 7. 62 atau lebih tinggi. Konon, sebagian besar sistem operasi sudah menggunakan Curl 7. 68, jadi ini seharusnya tidak menjadi masalah Untuk menentukan DNS-over-HTTPS, gunakan opsi function pick_card(Suit $suit) {} pick_card(Suit::Spades);16 $fiber = new Fiber(function(): void { echo "Hello from the Fiber\n"; Fiber::suspend(); echo "Welcome back to the Fiber\n"; }); echo "Starting the program\n"; $fiber->start(); echo "Taken control back\n"; echo "Resuming Fiber\n"; $fiber->resume(); echo "Program ends\n";_0 Perhatikan bahwa URL server harus berupa URL HTTPS, dan akan divalidasi saat permintaan dijalankan. Permintaan akan gagal jika URL untuk server DNS tidak valid atau tidak memberikan respons yang valid Kami menggunakan server DNS publik Google pada contoh di atas, tetapi Anda juga dapat memilih server DNS-over-HTTPS publik lainnya Kelas CurlStringFile untuk Upload File dari StringsEkstensi Curl memiliki kelas function pick_card(Suit $suit) {} pick_card(Suit::Spades);_17 baru yang berfungsi serupa dengan kelas function pick_card(Suit $suit) {} pick_card(Suit::Spades);18 untuk mengunggah file. Namun, kelas function pick_card(Suit $suit) {} pick_card(Suit::Spades);_18 hanya menerima URI atau jalur file, sedangkan function pick_card(Suit $suit) {} pick_card(Suit::Spades);17 menerima konten file alih-alih jalur atau URI PHP8 baru. Kelas 1 mempermudah pembuatan permintaan upload file menggunakan data yang tersimpan di memori. Misalnya, gunakan ini untuk mengunggah gambar yang diproses dalam PHP atau disimpan dalam variabel PHP Berikut adalah contoh penggunaan function pick_card(Suit $suit) {} pick_card(Suit::Spades);_17 dalam kode PHP $fiber = new Fiber(function(): void { echo "Hello from the Fiber\n"; Fiber::suspend(); echo "Welcome back to the Fiber\n"; }); echo "Starting the program\n"; $fiber->start(); echo "Taken control back\n"; echo "Resuming Fiber\n"; $fiber->resume(); echo "Program ends\n";_1 Dukungan Algoritma untuk MurmurHash3 dan xxHash HashPHP 8. 1 memperkenalkan dukungan untuk dua algoritme hashing non-kriptografis – MurmurHash3 dan xxHash. Hash non-kriptografis lebih cepat daripada sebagian besar algoritma hashing PHP saat ini, namun tetap memberikan dispersi dan keacakan keluaran yang bagus MurmurHash3 Untuk MurmurHash3, berikut varian yang didukung
Untuk hash string menggunakan MurmurHash3, gunakan sintaks seperti ini $fiber = new Fiber(function(): void { echo "Hello from the Fiber\n"; Fiber::suspend(); echo "Welcome back to the Fiber\n"; }); echo "Starting the program\n"; $fiber->start(); echo "Taken control back\n"; echo "Resuming Fiber\n"; $fiber->resume(); echo "Program ends\n";_2 Anda dapat memperbarui nilai secara berurutan tanpa melakukan hashing string input secara keseluruhan. Ini dikenal sebagai hash streaming $fiber = new Fiber(function(): void { echo "Hello from the Fiber\n"; Fiber::suspend(); echo "Welcome back to the Fiber\n"; }); echo "Starting the program\n"; $fiber->start(); echo "Taken control back\n"; echo "Resuming Fiber\n"; $fiber->resume(); echo "Program ends\n";_3 xxHash PHP 8. 1 mendukung algoritma xxHash berikut
Berikut sintaks untuk hash sebuah string menggunakan xxHash $fiber = new Fiber(function(): void { echo "Hello from the Fiber\n"; Fiber::suspend(); echo "Welcome back to the Fiber\n"; }); echo "Starting the program\n"; $fiber->start(); echo "Taken control back\n"; echo "Resuming Fiber\n"; $fiber->resume(); echo "Program ends\n";_4 Mirip dengan MurmurHash3, xxHash juga merupakan hash streaming yang memungkinkan Anda memperbarui nilai secara berurutan $fiber = new Fiber(function(): void { echo "Hello from the Fiber\n"; Fiber::suspend(); echo "Welcome back to the Fiber\n"; }); echo "Starting the program\n"; $fiber->start(); echo "Taken control back\n"; echo "Resuming Fiber\n"; $fiber->resume(); echo "Program ends\n";_5 Peningkatan KinerjaPHP 8. 1 menambahkan fitur baru untuk menghapus overhead kelas pewarisan, Cache Warisan Sebelumnya, opcache mengkompilasi dan meng-cache kelas PHP secara terpisah. Kemudian, itu menautkan kelas-kelas ini pada waktu proses selama setiap permintaan Proses penautan membutuhkan pemeriksaan kompatibilitas dan metode peminjaman, properti, atau konstanta dari kelas dan sifat induk. Ini memperlambat eksekusi, meskipun hasilnya akan sama untuk setiap permintaan Cache Warisan baru menyelesaikan ini dengan menautkan semua kelas dependen unik dan menyimpannya di memori bersama opcache. Tambalan ini juga menghilangkan batasan untuk kelas yang tidak dapat diubah – semua kelas yang disimpan di opcache sekarang tidak dapat diubah Ini menghasilkan lebih sedikit instruksi untuk setiap permintaan dan peningkatan 8% untuk Symfony “Hello, World. aplikasi MySQL_I_REFRESH_Replika KonstanMySQLi memperkenalkan konstanta baru untuk PHP 8. 1 bernama function pick_card(Suit $suit) {} pick_card(Suit::Spades);_25. Konstanta ini memiliki fungsi yang sama dengan konstanta ________2______26 yang ada Nama baru tersebut membahas ketidakpekaan rasial terkait terminologi budak. Namun, konstanta function pick_card(Suit $suit) {} pick_card(Suit::Spades);26 yang ada tidak akan dihapus atau tidak digunakan lagi di PHP 8. 1 Perubahan dalam PHP 8. 1PHP 8. 1 memperkenalkan beberapa perubahan dalam sintaks dan fungsionalitas. Sebagian besar dari mereka tidak mengubah fitur yang ada secara signifikan, tetapi Anda harus menyadari perubahan ini jika Anda terus menggunakan aplikasi PHP yang ada di PHP 8. 1 Fungsi Enkode/Dekode HTML Mengonversi Tanda Kutip Tunggal dan Menggantinya secara DefaultPHP 8.1 brings changes to functions that decode and encode HTML entities. HTML entity is a textual representation of a character in the HTML code. Common examples of HTML entities are the < and > characters that make up HTML tags such as or .Browser akan menafsirkan karakter ini sebagai kode HTML jika Anda menggunakannya dalam dokumen HTML. Oleh karena itu, jika Anda ingin browser menampilkannya dalam bentuk aslinya, Anda harus menggunakan entitas HTML-nya For example, you want the browser to render as a text. Thus, you write it in the HTML document as <h1>. < and > represent < and > respectively.PHP memiliki beberapa fungsi untuk mengubah karakter HTML menjadi entitas HTML
Di versi PHP sebelumnya, fungsi ini tidak mengonversi tanda kutip tunggal (') dan akan mengembalikan string kosong. Ini berubah dalam PHP 8. 1 karena mereka sekarang mengubah karakter kutipan tunggal menjadi entitas HTML-nya, ' Perubahan dilakukan dengan mengalihkan tanda tangan function pick_card(Suit $suit) {} pick_card(Suit::Spades);_30 pada fungsi menjadi function pick_card(Suit $suit) {} pick_card(Suit::Spades);31. Berikut adalah sintaks baru
Shell Interaktif Membutuhkan Ekstensi ReadlineDi versi PHP sebelumnya, dimungkinkan untuk membuka shell interaktif dengan opsi function pick_card(Suit $suit) {} pick_card(Suit::Spades);37. Namun, fitur interaktif tidak diaktifkan karena memerlukan ekstensi readline Oleh karena itu, opsi function pick_card(Suit $suit) {} pick_card(Suit::Spades);_37 tidak ada artinya dan sama dengan membuka shell non-interaktif menggunakan perintah function pick_card(Suit $suit) {} pick_card(Suit::Spades);39 Ini sekarang diperbaiki di PHP 8. 1. Menggunakan opsi function pick_card(Suit $suit) {} pick_card(Suit::Spades);_37 di baris perintah tanpa mengaktifkan ekstensi readline akan mengembalikan pesan kesalahan $fiber = new Fiber(function(): void { echo "Hello from the Fiber\n"; Fiber::suspend(); echo "Welcome back to the Fiber\n"; }); echo "Starting the program\n"; $fiber->start(); echo "Taken control back\n"; echo "Resuming Fiber\n"; $fiber->resume(); echo "Program ends\n";_6 Namun, jika Anda mengaktifkan ekstensi, itu akan membuka shell interaktif $fiber = new Fiber(function(): void { echo "Hello from the Fiber\n"; Fiber::suspend(); echo "Welcome back to the Fiber\n"; }); echo "Starting the program\n"; $fiber->start(); echo "Taken control back\n"; echo "Resuming Fiber\n"; $fiber->resume(); echo "Program ends\n";_7 Mode Kesalahan Default MySQLi Diatur ke PengecualianSebelum PHP 8. 1, perilaku penanganan kesalahan default dari MySQLi adalah membungkam kesalahan. Pengembang harus menyetel fungsi penanganan kesalahan mereka, atau kode tidak akan mengikuti penanganan kesalahan yang ketat Di PHP8. 1, penanganan kesalahan default diatur untuk membuang pengecualian $fiber = new Fiber(function(): void { echo "Hello from the Fiber\n"; Fiber::suspend(); echo "Welcome back to the Fiber\n"; }); echo "Starting the program\n"; $fiber->start(); echo "Taken control back\n"; echo "Resuming Fiber\n"; $fiber->resume(); echo "Program ends\n";_8 Ini adalah perubahan yang merusak dan, karena nilainya berbeda, ini akan menyebabkan masalah kompatibilitas. Namun, selesaikan ini dengan secara eksplisit mengatur penanganan kesalahan menggunakan fungsi function pick_card(Suit $suit) {} pick_card(Suit::Spades);41 sebelum membuat koneksi MySQLi pertama $fiber = new Fiber(function(): void { echo "Hello from the Fiber\n"; Fiber::suspend(); echo "Welcome back to the Fiber\n"; }); echo "Starting the program\n"; $fiber->start(); echo "Taken control back\n"; echo "Resuming Fiber\n"; $fiber->resume(); echo "Program ends\n";_9 Akhir Baris yang Dapat Disesuaikan untuk Fungsi Penulisan CSVPada versi PHP sebelumnya, fungsi function pick_card(Suit $suit) {} pick_card(Suit::Spades);42 dan function pick_card(Suit $suit) {} pick_card(Suit::Spades);43 di-hard-code menjadi karakter end-of-line "\n". PHP 8. 1 memperkenalkan fungsi function pick_card(Suit $suit) {} pick_card(Suit::Spades);_44 baru untuk memungkinkan karakter end-of-line yang dapat disesuaikan Namun, parameter ini bersifat opsional, dan fungsi akan tetap menggunakan "\n" secara default. Jika Anda memiliki kode atau aplikasi yang tidak menetapkan karakter end-of-line secara eksplisit, itu akan tetap menggunakan "\n" Jika Anda ingin menggunakan parameter function pick_card(Suit $suit) {} pick_card(Suit::Spades);_44 untuk karakter end-of-line khusus, berikut adalah contoh sintaks Starting the program Hello from the Fiber Taken control back Resuming Fiber Welcome back to the Fiber Program ends_0 Perhatikan bahwa Anda harus menggunakan tanda kutip ganda dengan karakter akhir baris seperti \r, \n, atau \r\n agar dapat ditafsirkan dengan benar Peringatan Pemanggilan Fungsi Ringkas untuk Parameter Dengan String Non-string dan Non-arrayFungsi kompak berguna untuk membuat array yang berisi variabel dan nilainya. Berikut adalah contoh fungsi kompak Starting the program Hello from the Fiber Taken control back Resuming Fiber Welcome back to the Fiber Program ends_1 Dalam dokumentasinya, fungsi compact hanya menerima parameter string atau array dengan nilai string. Namun, ini mungkin terlihat seperti menerima parameter non-string dan non-array, tetapi sebenarnya mengabaikannya Jika Anda mendeklarasikan tipe-ketat dengan function pick_card(Suit $suit) {} pick_card(Suit::Spades);_46, fungsi tersebut juga tidak akan melakukan pemeriksaan tipe-ketat Ini diubah dalam PHP 8. 1, karena fungsi ringkas sekarang menampilkan peringatan jika argumen berisi non-string atau larik yang tidak terdiri dari kunci string Starting the program Hello from the Fiber Taken control back Resuming Fiber Welcome back to the Fiber Program ends_2 Yang mengatakan, mendeklarasikan tipe yang ketat tidak akan berdampak, dan fungsi tersebut tetap tidak akan menimbulkan kesalahan tipe Algoritma Tanda Tangan Phar Berubah Dari SHA1 ke SHA256Ekstensi Phar digunakan untuk mengemas aplikasi PHP ke dalam file arsip Phar. File ini kemudian dapat dieksekusi di lingkungan PHP apa pun Setiap file Phar berisi tanda tangan untuk memverifikasi integritas file sebelum eksekusi. Algoritme tanda tangan default untuk file Phar dulunya adalah SHA1. Namun, dalam PHP 8. 1, yang berubah menjadi SHA256 Anda dapat mengganti algoritme tanda tangan menggunakan function pick_card(Suit $suit) {} pick_card(Suit::Spades);47 dan memilih MD5, SHA1, SHA256, atau SHA512. Berikut cuplikan kodenya Starting the program Hello from the Fiber Taken control back Resuming Fiber Welcome back to the Fiber Program ends_3 Perhatikan bahwa semua versi PHP sejak 5. 3 mendukung algoritma SHA256. Ini berarti semua file Phar dihasilkan dengan PHP 8. 1 masih akan kompatibel dengan versi lama. Namun, dua algoritme tanda tangan baru – OpenSSL-256 dan OpenSSL-512 – tidak kompatibel dengan versi PHP yang lebih lama Implementasi JsonSerializable di SplFixedArraySp function pick_card(Suit $suit) {} pick_card(Suit::Spades);48 membuat sejumlah elemen tetap dalam array dan kuncinya akan berupa bilangan bulat dalam rentang Dalam versi PHP sebelumnya, fungsi function pick_card(Suit $suit) {} pick_card(Suit::Spades);_49 mengkodekan function pick_card(Suit $suit) {} pick_card(Suit::Spades);50 instance sebagai objek, bukan array. Ini akan berubah saat function pick_card(Suit $suit) {} pick_card(Suit::Spades);50 mengimplementasikan antarmuka JsonSerializable dan menyandikannya sebagai array Starting the program Hello from the Fiber Taken control back Resuming Fiber Welcome back to the Fiber Program ends_4 Sebelum PHP 8. 1, outputnya adalah sebagai berikut Starting the program Hello from the Fiber Taken control back Resuming Fiber Welcome back to the Fiber Program ends_5 Di PHP8. 1, akan seperti ini Starting the program Hello from the Fiber Taken control back Resuming Fiber Welcome back to the Fiber Program ends_6 Resource untuk Migrasi ObjekPengembangan PHP berencana untuk memindahkan sumber daya ke objek kelas standar Salah satu masalahnya adalah Anda tidak dapat memaksa atau menggunakan tipe sumber daya. Plus, kurangnya jenis sumber daya mencegah beberapa fungsi terkait sumber daya menambahkan jenis yang lebih ketat Tantangan lainnya adalah mempertahankan beberapa jenis sumber daya dengan fitur seperti status internal, penanganan memori, dan penghitungan referensi. Oleh karena itu, dalam hal ini, kelas PHP dapat digunakan sebagai gantinya Itulah beberapa alasan mengapa tim PHP memigrasikan tipe sumber daya ke objek. Namun, jenis sumber daya telah digunakan secara luas dalam aplikasi PHP, sehingga tim perlu memastikan migrasi yang tidak mengganggu Sumber Daya Koneksi FTP Sekarang Objek Kelas FTP\Connection Pada versi PHP sebelumnya, kami menggunakan fungsi function pick_card(Suit $suit) {} pick_card(Suit::Spades);_52 atau function pick_card(Suit $suit) {} pick_card(Suit::Spades);53 untuk membuat koneksi FTP. Fungsi-fungsi ini mengembalikan sumber daya bertipe function pick_card(Suit $suit) {} pick_card(Suit::Spades);_54 Di PHP8. 1, fungsi ini mengembalikan kelas function pick_card(Suit $suit) {} pick_card(Suit::Spades);_55. Kelas baru ini juga dinyatakan final, artinya Anda tidak dapat memperpanjangnya. Ini juga meminimalkan potensi masalah kompatibilitas ke belakang jika inti PHP mengubah metode kelas function pick_card(Suit $suit) {} pick_card(Suit::Spades);55 Pengidentifikasi Font GD Sekarang Menjadi Objek Kelas GdFont Pada versi PHP sebelumnya, fungsi function pick_card(Suit $suit) {} pick_card(Suit::Spades);_57 dari ekstensi GD digunakan untuk mengembalikan ID sumber daya function pick_card(Suit $suit) {} pick_card(Suit::Spades);58 dalam bilangan bulat Dalam versi PHP yang baru, ID sumber daya telah bermigrasi ke kelas function pick_card(Suit $suit) {} pick_card(Suit::Spades);59 Agar perubahan tidak terlalu mengganggu, semua fungsi yang menerima ID sumber daya dari function pick_card(Suit $suit) {} pick_card(Suit::Spades);60eloadfont() juga menerima objek kelas function pick_card(Suit $suit) {} pick_card(Suit::Spades);59 yang baru file_info Sumber Daya Sekarang Objek finfo Beberapa fungsi dari ekstensi finfo mengembalikan dan menerima objek sumber daya dengan tipe function pick_card(Suit $suit) {} pick_card(Suit::Spades);62. Ini sekarang diubah menjadi objek kelas function pick_card(Suit $suit) {} pick_card(Suit::Spades);_63 agar selaras dengan rencana migrasi PHP Perhatikan bahwa kelas function pick_card(Suit $suit) {} pick_card(Suit::Spades);_63 telah tersedia sejak PHP 5. 3. Namun, fungsi function pick_card(Suit $suit) {} pick_card(Suit::Spades);_65 menerima atau mengembalikan sumber daya. Ini sekarang sudah diperbaiki, dan bahkan dimungkinkan untuk mengubah nilai pengembalian ke objek Ini adalah fungsi yang dipengaruhi oleh perubahan
Sumber Daya imap Sekarang Menjadi Objek Kelas IMAP\koneksi Sumber daya function pick_card(Suit $suit) {} pick_card(Suit::Spades);_71 dipindahkan ke kelas function pick_card(Suit $suit) {} pick_card(Suit::Spades);72. Sebelum ini, fungsi function pick_card(Suit $suit) {} pick_card(Suit::Spades);_73 mengembalikan objek sumber daya bertipe function pick_card(Suit $suit) {} pick_card(Suit::Spades);74 Untuk meminimalkan gangguan migrasi, semua fungsi yang menerima sumber daya akan berfungsi dengan kelas function pick_card(Suit $suit) {} pick_card(Suit::Spades);72 yang baru Mirip dengan kelas function pick_card(Suit $suit) {} pick_card(Suit::Spades);55, kelas function pick_card(Suit $suit) {} pick_card(Suit::Spades);72 juga dinyatakan final untuk mencegahnya diperpanjang dan menyebabkan masalah kompatibilitas ke belakang Sumber Daya PostgreSQL Sekarang \PgSql\Connection, \PgSql\Result, dan Objek \PgSql\Lob PostgreSQL adalah ekstensi basis data PHP yang menggunakan objek sumber daya untuk koneksi dan hasil basis data. Tiga objek sumber daya untuk PostgreSQL dimigrasikan ke objek kelas
Semua fungsi PostgreSQL yang mengembalikan dan menerima objek sumber daya kini mendukung objek kelas baru Sumber Daya LDAP Sekarang Objek LDAP\Connection, LDAP\Result, dan LDAP\ResultEntry LDAP (Lightweight Directory Access Protocol) adalah ekstensi PHP untuk mengakses Server Direktori, database khusus yang menyimpan informasi dalam struktur pohon Ekstensi ini menggunakan tiga objek sumber daya sebelum PHP 8. 1. Ketiga objek ini sekarang dimigrasikan ke instance kelas baru
Semua fungsi LDAP yang mengembalikan atau menerima objek sumber daya kini menerima objek kelas baru Sumber Daya Pspell Config Sekarang PSpell\Dictionary, Objek Kelas PSpell\Config Ekstensi PHP Pspell memungkinkan Anda memeriksa ejaan dan memberikan saran kata. Ini menggunakan function pick_card(Suit $suit) {} pick_card(Suit::Spades);_90 dan function pick_card(Suit $suit) {} pick_card(Suit::Spades);90 jenis objek sumber daya konfigurasi dengan pengidentifikasi bilangan bulat Objek sumber daya ini digantikan oleh objek kelas function pick_card(Suit $suit) {} pick_card(Suit::Spades);_92 dan function pick_card(Suit $suit) {} pick_card(Suit::Spades);93 di PHP 8. 1. Berikut adalah fungsi untuk membuat objek function pick_card(Suit $suit) {} pick_card(Suit::Spades);_92 dan function pick_card(Suit $suit) {} pick_card(Suit::Spades);93
Seperti sumber daya yang dimigrasikan lainnya, semua fungsi yang menerima function pick_card(Suit $suit) {} pick_card(Suit::Spades);90 dan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;01 sumber daya juga akan menerima function pick_card(Suit $suit) {} pick_card(Suit::Spades);92 dan function pick_card(Suit $suit) {} pick_card(Suit::Spades);93 Penghentian dalam PHP 8. 1PHP 8. 1 menghentikan beberapa fitur, termasuk lebih dari sepuluh fungsi PHP yang sudah ada. Berikut ikhtisar fitur dan fungsi yang tidak digunakan lagi di PHP 8. 1 Pembatasan Penggunaan $GlobalVariabel enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_04 memberikan referensi ke semua variabel lingkup global. Ini juga mengandung nilai "superglobal", termasuk enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;05, enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;06, dan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;07 PHP 8. 1 tidak sepenuhnya menghentikan fitur tetapi membatasi modifikasi apa pun pada larik enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;04, seperti menghancurkan larik, menimpa nilainya, dan mereferensikan variabel enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;04 Ini karena mendukung beberapa perilaku variabel enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_04 membutuhkan kerja teknis yang rumit Jika Anda mencoba melakukan modifikasi ini di PHP 8. 1, Anda akan mendapatkan kesalahan fatal. Berikut adalah contoh membuat perubahan massal ke variabel enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;04 Starting the program Hello from the Fiber Taken control back Resuming Fiber Welcome back to the Fiber Program ends_7 Ini akan menghasilkan kesalahan berikut Starting the program Hello from the Fiber Taken control back Resuming Fiber Welcome back to the Fiber Program ends_8 Perhatikan bahwa penggunaan hanya-baca dari variabel enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_04 dan modifikasi ke elemen array individu masih diperbolehkan Meneruskan null ke Fungsi Internal yang tidak dapat dibatalkan Tidak DiizinkanDi PHP, Anda seharusnya tidak dapat meneruskan nilai nol ke fungsi yang tidak dapat dibatalkan. Pembatasan berfungsi untuk fungsi yang ditentukan pengguna di versi PHP sebelumnya. Fungsi internal diam-diam menerima nilai nol Untuk menjaga konsistensi, fungsi internal tidak lagi menerima nilai null. Meneruskan argumen null ke non-nullable akan mengembalikan pemberitahuan penghentian Starting the program Hello from the Fiber Taken control back Resuming Fiber Welcome back to the Fiber Program ends_9 Penghentian ini adalah bagian dari rencana untuk menghapus fungsionalitas tersebut. Menurut RFC-nya, meneruskan nilai nol ke fungsi internal yang tidak dapat dibatalkan akan menghasilkan TypeError. Itu akan membuat fungsi internal konsisten dengan perilaku saat ini dari fungsi yang ditentukan pengguna Fungsi yang Tidak Digunakan LagiPHP 8. 1 juga menghentikan 11 fungsi PHP yang dapat memengaruhi aplikasi yang ada Antarmuka Serializable yang tidak digunakan lagi Kelas PHP memiliki logika serialisasi yang unik. Misalnya, mereka dapat mencegah data sensitif tertentu dari serialisasi atau membangun kembali koneksi server jarak jauh menggunakan teks berseri. Mereka menggunakan tiga metode berbeda
enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;18 dan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;19 diperkenalkan di PHP 7. 4 untuk mengatasi masalah dengan antarmuka Serializable. Namun, rencana terakhir adalah menghapus antarmuka enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_15 di versi PHP mendatang Untuk PHP8. 1, menerapkan antarmuka enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;23 pada kelas tanpa metode enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;18 dan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;19 akan menghasilkan kesalahan penghentian function count_and_iterate(Iterator&\Countable $value) { foreach($value as $val) {} count($value); }_0 Ini akan menghasilkan pesan kesalahan berikut function count_and_iterate(Iterator&\Countable $value) { foreach($value as $val) {} count($value); }_1 Namun, masih mungkin untuk mengimplementasikan antarmuka Serializable selama kelas juga mengimplementasikan metode ajaib enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;18 dan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;19 function count_and_iterate(Iterator&\Countable $value) { foreach($value as $val) {} count($value); }_2 Antarmuka enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_15 mendekode muatan serialisasi yang ada, dan pemberitahuan penghentian tidak akan muncul. Jika tidak perlu untuk PHP 7. 3 dukungan dalam aplikasi, Anda dapat mengganti antarmuka Serializable dengan metode ajaib ________7______18and enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;19 Autovivifikasi yang tidak digunakan lagi pada False Autovivifikasi adalah pembuatan otomatis array dari nilai false dan null. Meskipun fitur ini banyak digunakan dalam aplikasi PHP, membuat larik secara otomatis dari nilai yang salah tidaklah ideal karena mungkin merupakan tanda kode buggy Oleh karena itu, PHP8. 1 tidak lagi menggunakan autovivifikasi hanya untuk nilai yang salah. Menerapkan autovivifikasi pada variabel palsu di PHP 8. 1 akan menghasilkan pemberitahuan penghentian function count_and_iterate(Iterator&\Countable $value) { foreach($value as $val) {} count($value); }_3 Dalam rilis mendatang, rencananya adalah untuk mengeluarkan kesalahan fatal pada implementasi tersebut. Sedangkan untuk nilai undefined dan null, autovivifikasi masih diperbolehkan mysqli yang sudah tidak digunakan lagi. get_client_info dan mysqli_get_client_info ($param) Meneruskan parameter ke fungsi enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;31 dan metode enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;32 digunakan untuk mengembalikan versi klien MySQLi melalui konstanta string enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;33 Sebelum PHP 8. 1, ada empat opsi yang memungkinkan untuk mengekspos konstanta client_info
Di sisi lain, MySQL Native Driver (MySQLnd) menampilkan konstanta hanya dengan dua opsi – konstanta dan pemanggilan fungsi Meneruskan parameter ke fungsi enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;31 dan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;32 sekarang tidak digunakan lagi dalam upaya menyatukan metode akses Menggunakan metode enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_40 di kelas enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;41 sekarang mengeluarkan pemberitahuan penghentian function count_and_iterate(Iterator&\Countable $value) { foreach($value as $val) {} count($value); }_4 Meneruskan parameter ke fungsi enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;31 juga akan menghasilkan pemberitahuan penghentian function count_and_iterate(Iterator&\Countable $value) { foreach($value as $val) {} count($value); }_5 Alih-alih menggunakan opsi yang tidak digunakan lagi, gunakan fungsi enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;31 tanpa parameter function count_and_iterate(Iterator&\Countable $value) { foreach($value as $val) {} count($value); }_6 Konversi Float ke Int Implisit Tidak Kompatibel yang Tidak Digunakan Lagi Ketik pemaksaan umum di PHP, dan dalam kebanyakan kasus, mereka sangat membantu. Namun, masalah muncul ketika angka float diubah menjadi bilangan bulat karena dapat menyebabkan hilangnya data. Misalnya, 1. 618 akan diubah menjadi 1, kehilangan nilai pecahannya PHP 8. 1 mengatasi masalah ini dengan mengeluarkan pemberitahuan penghentian jika float yang tidak kompatibel secara implisit dipaksa menjadi bilangan bulat. Pemberitahuan harus mencegah hilangnya nilai pecahan yang tidak diinginkan Di bawah ini adalah contoh mendeklarasikan fungsi dengan tipe kembalian int. Saat fungsi dipanggil, PHP akan mengubah nilai 1. 618 ke bilangan bulat, menghasilkan pemberitahuan penghentian function count_and_iterate(Iterator&\Countable $value) { foreach($value as $val) {} count($value); }_7 Pemberitahuan penghentian tidak akan dipancarkan jika nilainya adalah float yang kompatibel dengan bilangan bulat. Menurut RFC, berikut adalah karakteristik pelampung yang kompatibel dengan bilangan bulat
Filter yang tidak digunakan lagi. default dan filter. default_options DI SINI Pengaturan Pengaturan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_44 INI menerapkan filter ke semua super global PHP sesuai dengan nilainya. Nilai default untuk pengaturan ini adalah enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_45 – ini menghindari aplikasi filter apa pun di super global Masalah dengan pengaturan ini adalah dapat mengembalikan fungsi kutipan ajaib dengan nilai enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;46. Fitur ini telah dihapus di PHP 5. 4 karena pendekatan yang tidak dapat diandalkan untuk sanitasi input pengguna Untuk mengatasinya, menetapkan nilai apa pun selain enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;47 ke pengaturan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;44 INI akan mengeluarkan pemberitahuan penghentian PHP pada waktu mulai. Tidak ada peringatan terpisah untuk enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_49, tetapi dua pengaturan INI akan dihapus di versi PHP utama berikutnya Date_sunrise dan date_sunset tidak digunakan lagi Fungsi enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_50 dan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;51 mengembalikan waktu matahari terbit dan terbenam dengan mengambil nilai default enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;52 dan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;53 dari pengaturan PHP INI. Sayangnya, tidak ada fungsi lain yang menggunakan pengaturan INI, dan konsepnya sendiri tidak masuk akal Akibatnya, fungsi enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;50 dan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;51 tidak digunakan lagi di PHP 8. 1 dan digantikan oleh fungsi enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_56. Sesuai dengan penghentian, setelan INI berikut juga tidak digunakan lagi
Menggunakan fungsi enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_61 dan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;62 di PHP 8. 1 akan mengeluarkan peringatan penghentian. Namun, menyetel nilai INI terkait atau menggunakan fungsi enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;63 tidak akan menghasilkan pemberitahuan strptime yang tidak digunakan lagi Fungsi enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_64 mem-parsing string tanggal atau waktu ke dalam array. Menggunakan fungsi ini pada beberapa distribusi Linux seperti Alpine dapat menyebabkan perilaku yang tidak terduga karena menggunakan pustaka musl C. Selain itu, fungsi ini berbasis lokal dan dapat terpengaruh jika Anda menjalankan kode lain di utas berbeda Manual fungsi merekomendasikan penggunaan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;65 karena lebih konsisten dan tidak mengalami masalah yang sama. Alternatif lain juga tersedia, seperti enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;66 yang lebih berorientasi objek dan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;67 untuk parsing yang bergantung pada lokal Akibatnya, fungsi enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_64 tidak digunakan lagi karena opsi yang lebih konsisten Tidak digunakan lagi strftime dan gmstrftime Fungsi enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_69 dan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;70 mirip dengan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;64. Mereka memformat stempel waktu dan tanggal sesuai dengan pengaturan lokal, kecuali bahwa enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;72 mengembalikan waktu dalam GMT Sayangnya, fungsi ini juga mengalami masalah yang sama seperti enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;64 dalam hal format yang didukung dan perilaku Fungsi ini tidak digunakan lagi dan diganti dengan fungsi enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;74 atau enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;75. Untuk penggunaan yang bergantung pada lokal, enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_76 adalah pengganti yang ideal Ekstensi mhash*() atau hash yang tidak digunakan lagi enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;77 fungsi dibawa ke PHP dengan ekstensi mhash. Namun, ekstensi ini diganti dengan ekstensi hash di PHP 5. 3. Fungsi hanya dapat digunakan dengan ekstensi hash dan opsi konfigurasi PHP enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;78 Sejak PHP 7. 4, ekstensi hash menjadi satu bundel dengan PHP. enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_79 masih dapat digunakan karena opsi enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;78 masih didukung untuk tujuan kompatibilitas Namun, tim PHP tidak lagi menggunakan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;81 di PHP 8. 1 dan akan menghapusnya di PHP 9. 0. Penggunaan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_81 berikut akan mengembalikan peringatan penghentian
Karena sekarang hash adalah ekstensi default, sebaiknya gunakan fungsi enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;88 sebagai gantinya PDO yang tidak digunakan lagi. FETCH_SERIALIZE enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;89 digunakan sebagai bendera untuk metode pengambilan pernyataan PDO. Kemudian, PDO seharusnya memanggil unserialize pada data yang diambil dari database Namun, fungsi ini tidak dapat digunakan. Selain itu, dengan dihentikannya antarmuka enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_15, tim PHP juga memutuskan untuk menghentikan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;89 Menggunakan enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_89 di PHP 8. 1 akan mengembalikan pemberitahuan penghentian MySQLi yang sudah tidak digunakan lagi. properti mysqli_driver->driver_version Properti enum Suit: string { case Spades = ‘10’; case Hearts = ‘8’; case Diamonds = ‘5’; case Clubs = ‘3’;_93 di ekstensi MySQLi seharusnya mengembalikan nilai versi driver. Namun, properti ini belum diperbarui selama 13 tahun meskipun banyak perubahan pada pengemudi Oleh karena itu, properti ini dianggap tidak berarti dan tidak digunakan lagi di PHP 8. 1 Pastikan situs web Anda dapat menangani semuanya – mulai dari lalu lintas tinggi hingga waktu pemuatan yang cepat, dan banyak lagi. Beli Hosting Web KesimpulanSebagai versi utama baru, PHP 8. 1 menghadirkan banyak fitur baru, perubahan, dan penghentian yang merupakan kabar baik bagi pengembang PHP Misalnya, fitur seperti serat harus membuka peluang baru untuk berkreasi dengan eksekusi pengkodean. Bahkan perubahan kecil seperti konversi kutipan tunggal ke entitas HTML sangat disambut baik Anda dapat memeriksa dokumentasi resmi PHP untuk melihat atau daftar penghentian untuk informasi lebih lanjut tentang PHP 8. 1 Hostinger akan mendukung PHP 8. 1, tetapi kami akan menyimpan opsi untuk versi PHP yang lebih lama jika Anda membutuhkannya. Namun, kami sangat menyarankan pindah ke PHP 8. 1 untuk mengakses peningkatan baru dan mempertahankan kompatibilitas dengan kerangka kerja dan pustaka Penulis Leonardo N Leo adalah seorang fanatik dan kontributor WordPress. Dia suka mengikuti berita dan pembaruan WordPress terbaru, dan berbagi pengetahuannya untuk membantu orang membangun situs web yang sukses. Saat tidak bekerja, dia berkontribusi pada tim dokumentasi WordPress dan memanjakan anjingnya |