Cara menggunakan php 8.1 htmlspecialchars

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

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 cPanel

Seperti 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 PHP

Anda 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'

Cara menggunakan php 8.1 htmlspecialchars

2. Pilih versi PHP yang akan digunakan, dengan mengklik pilihan yang tersedia pada bagian “Versi PHP”.

Cara menggunakan php 8.1 htmlspecialchars

3. Jangan lupa klik set as current untuk menyimpan versi php yang Anda butuhkan

Nonaktifkan Aktifkan Ekstensi PHP

Selain 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

Cara menggunakan php 8.1 htmlspecialchars

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

Cara menggunakan php 8.1 htmlspecialchars

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 PHP

Bagi 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 MultiPHP

Anda 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

  1. Login ke cPanel hosting Anda
  2. Klik menu MultiPHP Manager
Cara menggunakan php 8.1 htmlspecialchars
  1. Centang nama domain yang ingin diubah, lalu pada kolom Versi PHP silahkan pilih versi php yang dibutuhkan. Pastikan Anda memilih opsi php yang dimulai dengan ea-php
Cara menggunakan php 8.1 htmlspecialchars

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

Cara menggunakan php 8.1 htmlspecialchars

 

Fitur Baru dan Upgrade di PHP 8. 1

Versi 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

Pencacahan

PHP 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

  • Deklarasikan tipe skalar, apakah
    function count_and_iterate(Iterator&\Countable $value) {
        foreach($value as $val) {}
        count($value);
    }
    9 atau
    function redirect(string $url): never {
        header('Location: ' . $url);
        exit();
    }
    0, dalam deklarasi Enum
  • Semua kasus memiliki nilai
  • Semua kasus berisi tipe skalar yang sama, apakah
    function count_and_iterate(Iterator&\Countable $value) {
        foreach($value as $val) {}
        count($value);
    }
    9 atau
    function redirect(string $url): never {
        header('Location: ' . $url);
        exit();
    }
    0
  • Setiap kasus memiliki nilai unik

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

Serat

Fitur 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 Murni

PHP 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 Pengembalian

Ada 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_list

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 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] Atribut

Atribut 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

readonlyProperties

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 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-sequential
0 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-sequential
1 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-sequential
2 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-sequential
1 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-sequential
2 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-sequential
1 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-sequential
2 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-sequential
1atau
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
2 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 XChaCha20

Sodium 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

  • sodium_crypto_stream_xchacha20_keygen – menghasilkan kunci acak untuk digunakan dengan fungsi
    class Sample implements ArrayAccess {
        #[\ReturnTypeWillChange]
        public function offsetGet(mixed $offset) {}
        // ...
    }
    1
  • sodium_crypto_stream_xchacha20 – menghasilkan keystream byte pseudorandom dengan memperluas nonce kriptografi dan kunci yang dihasilkan sebelumnya
  • sodium_crypto_stream_xchacha20_xor – mengenkripsi pesan menggunakan nonce dan kunci aman tanpa autentikasi

Bersamaan dengan fungsi baru, dua konstanta PHP baru didefinisikan di namespace global

  • class Sample implements ArrayAccess {
        #[\ReturnTypeWillChange]
        public function offsetGet(mixed $offset) {}
        // ...
    }
    2, ditugaskan 32
  • class Sample implements ArrayAccess {
        #[\ReturnTypeWillChange]
        public function offsetGet(mixed $offset) {}
        // ...
    }
    3, ditugaskan 24

baru di Inisialisasi

PHP 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-String

Versi 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 satu

PHP 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 Baru

Di 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 akhir

Mendeklarasikan 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 Eksplisit

PHP 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

  • Hex – 0x
  • Biner – 0b
  • Oktal – 0

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 Direktori

function 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 GdImage

Di 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 AVIF

Selain 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

  • Ubuntu/Debian –
    function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    12
  • RHEL/Fedora –
    function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    13

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-HTTPS

DNS-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 Strings

Ekstensi 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 Hash

PHP 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

  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    22 – hash 32-bit
  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    23 – hash 128-bit pada arsitektur x86
  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    24– 128-bit hash pada arsitektur x64

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

  • xxh32 – keluaran hash 32-bit
  • xxh64 – keluaran hash 64-bit
  • xxh3 – keluaran hash 64-bit
  • xxh128 – keluaran hash 128-bit

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 Kinerja

PHP 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 Konstan

MySQLi 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. 1

PHP 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 Default

PHP 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

  • htmlspecialchars – mengubah karakter khusus menjadi entitas HTML
  • htmlspecialchars_decode – mengubah entitas HTML menjadi karakter khusus
  • htmlentities – mengubah karakter yang berlaku menjadi entitas HTML
  • html_entity_decode – mengonversi entitas HTML menjadi karakter terkait
  • get_html_translation_table – mengembalikan tabel terjemahan untuk fungsi
    function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    28 dan
    function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    29

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

  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    _32
  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    _33
  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    _34
  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    _35
  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    _36

Shell Interaktif Membutuhkan Ekstensi Readline

Di 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 Pengecualian

Sebelum 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 CSV

Pada 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-array

Fungsi 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 SHA256

Ekstensi 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 SplFixedArray

Sp

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 Objek

Pengembangan 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

  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    _66
  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    _67
  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    _68
  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    _69
  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    70

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

  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    78 sumber daya ke kelas
    function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    79
  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    80 sumber daya ke kelas
    function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    81
  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    82 sumber daya objek besar ke kelas
    function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    83

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

  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    84 sumber daya ke kelas
    function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    85
  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    86 sumber daya ke kelas
    function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    87
  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    88 sumber daya ke kelas
    function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    89

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

  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    _96
  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    _97
  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    _98
  • function pick_card(Suit $suit) {}
    pick_card(Suit::Spades);
    _99

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. 1

PHP 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 $Global

Variabel

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 Diizinkan

Di 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 Lagi

PHP 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’;
    13 dan
    enum Suit: string {
    	case Spades = ‘10’;
    	case Hearts = ‘8’;
    	case Diamonds = ‘5’;
    	case Clubs = ‘3’;
    14 metode ajaib
  • enum Suit: string {
    	case Spades = ‘10’;
    	case Hearts = ‘8’;
    	case Diamonds = ‘5’;
    	case Clubs = ‘3’;
    15 antarmuka,
    enum Suit: string {
    	case Spades = ‘10’;
    	case Hearts = ‘8’;
    	case Diamonds = ‘5’;
    	case Clubs = ‘3’;
    16, dan
    enum Suit: string {
    	case Spades = ‘10’;
    	case Hearts = ‘8’;
    	case Diamonds = ‘5’;
    	case Clubs = ‘3’;
    17 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 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 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

  • enum Suit: string {
    	case Spades = ‘10’;
    	case Hearts = ‘8’;
    	case Diamonds = ‘5’;
    	case Clubs = ‘3’;
    _34
  • enum Suit: string {
    	case Spades = ‘10’;
    	case Hearts = ‘8’;
    	case Diamonds = ‘5’;
    	case Clubs = ‘3’;
    _35
  • enum Suit: string {
    	case Spades = ‘10’;
    	case Hearts = ‘8’;
    	case Diamonds = ‘5’;
    	case Clubs = ‘3’;
    _36
  • enum Suit: string {
    	case Spades = ‘10’;
    	case Hearts = ‘8’;
    	case Diamonds = ‘5’;
    	case Clubs = ‘3’;
    _37

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

  • Itu adalah angka
  • Itu berada dalam kisaran bilangan bulat PHP
  • Itu tidak memiliki bagian pecahan

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

  • enum Suit: string {
    	case Spades = ‘10’;
    	case Hearts = ‘8’;
    	case Diamonds = ‘5’;
    	case Clubs = ‘3’;
    _52
  • enum Suit: string {
    	case Spades = ‘10’;
    	case Hearts = ‘8’;
    	case Diamonds = ‘5’;
    	case Clubs = ‘3’;
    _53
  • enum Suit: string {
    	case Spades = ‘10’;
    	case Hearts = ‘8’;
    	case Diamonds = ‘5’;
    	case Clubs = ‘3’;
    _59
  • enum Suit: string {
    	case Spades = ‘10’;
    	case Hearts = ‘8’;
    	case Diamonds = ‘5’;
    	case Clubs = ‘3’;
    60

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

  • enum Suit: string {
    	case Spades = ‘10’;
    	case Hearts = ‘8’;
    	case Diamonds = ‘5’;
    	case Clubs = ‘3’;
    _83
  • enum Suit: string {
    	case Spades = ‘10’;
    	case Hearts = ‘8’;
    	case Diamonds = ‘5’;
    	case Clubs = ‘3’;
    _84
  • enum Suit: string {
    	case Spades = ‘10’;
    	case Hearts = ‘8’;
    	case Diamonds = ‘5’;
    	case Clubs = ‘3’;
    _85
  • enum Suit: string {
    	case Spades = ‘10’;
    	case Hearts = ‘8’;
    	case Diamonds = ‘5’;
    	case Clubs = ‘3’;
    _86
  • enum Suit: string {
    	case Spades = ‘10’;
    	case Hearts = ‘8’;
    	case Diamonds = ‘5’;
    	case Clubs = ‘3’;
    _87

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

Kesimpulan

Sebagai 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