PHP8.1 ciri baharu menjelaskan penghitungan Enums
Artikel ini ialah terjemahan, alamat asal: https://stitcher.io/blog/php-enums
PHP 8.1: Enumerations
Mereka akhirnya di sini – sokongan terbina dalam untuk penghitungan akan ditambah dalam PHP 8.1! Sesetengah orang mungkin fikir mereka sepatutnya melakukan ini sejak lama dahulu, tetapi anda tidak mendengar aduan saya; Artikel ini didedikasikan untuk menyelami lebih mendalam ciri yang baru ditambah.
Seperti biasa dalam siaran PHP saya, kita mulakan dengan gambaran keseluruhan peringkat tinggi tentang rupa penghitungan:
enum Status { case DRAFT; case PUBLISHED; case ARCHIVED; }
Perkara yang baik tentang penghitungan ialah ia mewakili satu set pemalar values , tetapi perkara yang paling penting ialah nilai boleh ditaip seperti ini:
class BlogPost { public function __construct( public Status $status, ) {} }
Dalam contoh ini, mencipta enum dan menghantarnya ke aBlogPost kelihatan seperti ini:
$post = new BlogPost(Status::DRAFT);
Itu sahaja untuk asasnya, dan seperti yang anda lihat, ia tidak rumit sama sekali. Walaupun terdapat banyak nota sampingan untuk dibuat, mari kita lihat dengan lebih mendalam tentang penghitungan!
# Kaedah Penghitungan
Penghitungan boleh menentukan kaedah, sama seperti kelas. Ini adalah ciri yang sangat berkuasa, terutamanya apabila digabungkan dengan pengendali perlawanan:
enum Status { case DRAFT; case PUBLISHED; case ARCHIVED; public function color(): string { return match($this) { Status::DRAFT => 'grey', Status::PUBLISHED => 'green', Status::ARCHIVED => 'red', }; } }
Kaedah boleh digunakan seperti ini:
$status = Status::ARCHIVED; $status->color(); // 'red'
Kaedah statik juga dibenarkan:
enum Status { // … public static function make(): Status { // … } }
Anda juga boleh menggunakan diri dalam penghitungan:
enum Status { // … public function color(): string { return match($this) { self::DRAFT => 'grey', self::PUBLISHED => 'green', self::ARCHIVED => 'red', }; } }
# Antara muka Penghitungan
Penghitungan boleh melaksanakan antara muka, seperti Sama seperti kelas biasa:
interface HasColor { public function color(): string; } enum Status implements HasColor { case DRAFT; case PUBLISHED; case ARCHIVED; public function color(): string { /* … */ } }
# Enum nilai - aka "backed enums"
Enum values diwakili secara dalaman oleh objek, tetapi anda boleh Berikan nilai kepada mereka seperti yang diperlukan; ini berguna untuk cth. Sirikan mereka ke dalam pangkalan data.
enum Status: string { case DRAFT = 'draft'; case PUBLISHED = 'published'; case ARCHIVED = 'archived'; }
Perhatikan pengisytiharan jenis dalam definisi penghitungan. Ia menunjukkan bahawa semua nilai penghitungan tergolong dalam jenis yang diberikan. Anda juga boleh menjadikannya int. Ambil perhatian bahawa onlyint dan rentetan dibenarkan sebagai nilai penghitungan.
enum Status: int { case DRAFT = 1; case PUBLISHED = 2; case ARCHIVED = 3; }
Istilah teknikal untuk jenis enum dipanggil "bilangan bersandar" kerana ia "disokong" oleh nilai yang lebih mudah. Jika anda memutuskan untuk memberikan nilai penghitungan, semua kes harus mempunyai nilai. Anda tidak boleh mencampur dan memadankannya. Enumerasi tanpa "backing" dipanggil "pure enumeration".
# Enum yang disandarkan dengan antara muka
Jika anda menggabungkan enum yang disokong dengan antara muka, jenis enum mesti datang terus selepas nama enum, dilaksanakan sebelum kata kunci.
enum Status: string implements HasColor { case DRAFT = 'draft'; case PUBLISHED = 'published'; case ARCHIVED = 'archived'; // … }
# Pensirian disokong enum
Jika anda memberikan nilai kepada kes enum, anda mungkin memerlukan cara untuk mensiri dan menyahsirikannya mengubahnya. Mensirikannya bermakna anda memerlukan cara untuk mengakses nilai enum. Ini dilakukan melalui sifat awam baca sahaja:
$value = Status::PUBLISHED->value; // 2
Penghitungan boleh dipulihkan daripada nilai menggunakan: Enum::from
$status = Status::from(2); // Status::PUBLISHED
Jika nilai yang tidak diketahui diluluskan tryFrom, Terdapat juga satu yang mengembalikan null. Terdapat pengecualian jika anda menggunakan daripada.
$status = Status::from('unknown'); // ValueError $status = Status::tryFrom('unknown'); // null
Perhatikan bahawa anda juga boleh menggunakan fungsi bersiri dan menyahsiri terbina dalam pada penghitungan. Selain itu, anda boleh menggunakan json_encode dengan penghitungan yang disokong dan hasilnya akan menjadi nilai penghitungan. Tingkah laku ini boleh diatasi dengan melaksanakan JsonSerializable.
# Senarai nilai penghitungan
Anda boleh menggunakan kaedah statik untuk mendapatkan senarai semua kes yang tersedia dalam penghitungan: Enum::cases()
Status::cases(); /* [ Status::DRAFT, Status::PUBLISHED, Status::ARCHIVED ] */
Perhatikan bahawa tatasusunan ini mengandungi objek penghitungan sebenar:
array_map( fn(Status $status) => $status->color(), Status::cases() );
# Penghitungan ialah objek
Saya sudah menyebut bahawa nilai penghitungan mewakili adalah objek, sebenarnya mereka adalah objek tunggal. Ini bermakna anda boleh membandingkannya seperti ini:
$statusA = Status::PENDING; $statusB = Status::PENDING; $statusC = Status::ARCHIVED; $statusA === $statusB; // true $statusA === $statusC; // false $statusC instanceof Status; // true
# Enum sebagai kunci tatasusunan
Memandangkan nilai enum sebenarnya objek, pada masa ini Ia tidak boleh digunakan sebagai kunci tatasusunan. Perkara berikut akan mengakibatkan ralat:
$list = [ Status::DRAFT => 'draft', // … ];
Terdapat RFC untuk menukar gelagat ini, tetapi ia belum diundi lagi.
Ini bermakna anda hanya boleh menggunakan enum sebagai kunci dalam SplObjectStorage dan WeakMaps.
# Traits
Enumerasi boleh menggunakan trait sama seperti kelas, tetapi dengan lebih banyak sekatan. Mengatasi kaedah penghitungan terbina dalam tidak dibenarkan dan kaedah tersebut tidak boleh mengandungi atribut kelas - penggunaannya dalam penghitungan adalah dilarang.
#Reflection and Properties
Seperti yang dijangkakan, beberapa kelas refleksi telah ditambah untuk mengendalikan penghitungan: ReflectionEnum, ReflectionEnumUnitCase dan ReflectionEnumBackedCase. Terdapat juga fungsi enum_exists baharu, yang melakukan apa yang dicadangkan oleh namanya.
Sama seperti kelas dan atribut biasa, penghitungan dan kesnya boleh dianotasi menggunakan atribut. Ambil perhatian bahawa penapis TARGET_CLASS juga akan termasuk penghitungan.
Satu perkara terakhir: enum juga mempunyai sifat baca sahaja, RFC menyebut bahawa ini adalah butiran pelaksanaan dan harus digunakan hanya untuk tujuan penyahpepijatan. Tetapi ia masih patut disebut. $enum->name
Atas ialah kandungan terperinci PHP8.1 ciri baharu menjelaskan penghitungan Enums. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Langkah-langkah untuk menambah sambungan mysql ke php8 ialah: 1. Pasang pustaka klien MySQL 2. Pasang alat pembangunan untuk PHP 8 3. Muat turun kod sumber sambungan MySQL 5. Dayakan Sambungan MySQL; 6. Mulakan Semula Hanya pelayan web.

Perbezaan antara php5 dan php8 adalah dari segi prestasi, struktur bahasa, sistem jenis, pengendalian ralat, pengaturcaraan tak segerak, fungsi perpustakaan standard dan keselamatan. Pengenalan terperinci: 1. Peningkatan prestasi Berbanding dengan PHP5, PHP8 mempunyai peningkatan besar dalam prestasi PHP8 memperkenalkan pengkompil JIT, yang boleh menyusun dan mengoptimumkan beberapa kod pelaksanaan frekuensi tinggi, dengan itu meningkatkan kelajuan berjalan; PHP8 memperkenalkan beberapa struktur dan fungsi bahasa baharu PHP8 menyokong parameter yang dinamakan, membenarkan pembangun menghantar nama parameter dan bukannya susunan parameter, dsb.

Artikel ini akan memperkenalkan kepada anda cara memasang apache2.4 dan cara mengkonfigurasi php8.0 Artikel disertakan dengan gambar dan langkah terperinci Mari kita lihat cara memasang dan mengkonfigurasi apache2.4+php8.0~

PHP8 boleh menggunakan mysqli dan PDO untuk menyambung ke pangkalan data. Pengenalan terperinci: 1. Gunakan mysqli untuk menyambung ke pangkalan data dengan memasukkan nama pelayan pangkalan data, nama pengguna, kata laluan dan nama pangkalan data untuk disambungkan. Kemudian, gunakan atribut `connect_error` untuk menyemak sama ada sambungan berjaya dan mengeluarkan mesej ralat jika sambungan gagal. Akhir sekali, tutup sambungan dengan memanggil kaedah `close()` 2. Gunakan PDO untuk menyambung ke pangkalan data, dan sambung dengan memasukkan nama pelayan pangkalan data, kata laluan dan nama pangkalan data, dsb.

Kaedah jenis data php8 termasuk menukar rentetan kepada integer, menukar integer kepada rentetan, menukar rentetan kepada nombor titik terapung, menukar nombor titik terapung kepada rentetan, menukar tatasusunan kepada rentetan, menukar rentetan kepada tatasusunan, menukar nilai Boolean kepada integer, penukaran integer kepada Nilai boolean dan penentuan jenis pembolehubah dan penukaran. Pengenalan terperinci: 1. Menukar rentetan kepada integer termasuk fungsi intval() dan (int) penukaran jenis paksa 2. Menukar integer kepada rentetan termasuk fungsi strval() dan (rentetan) penukaran jenis paksa; rentetan kepada apungan Mata dan sebagainya.

Artikel ini akan membawa anda melalui JIT dalam PHP 8 dan bercakap tentang cara JIT mengambil bahagian dalam proses tafsiran saya harap ia akan membantu semua orang.

Peningkatan prestasi php8 termasuk: 1. Pengenalan pengkompil JIT; 2. Pengoptimuman panggilan fungsi; . Memperbaik pemprosesan tatasusunan; 8. Memperkenalkan mekanisme pengurusan memori baharu; Pengenalan terperinci: 1. Pengenalan pengkompil JIT PHP8 memperkenalkan pengkompil JIT, yang merupakan teknologi kompilasi dinamik yang boleh menukar kod PHP kepada kod mesin untuk pelaksanaan yang lebih cekap, dsb.

Ciri-ciri php8: 1. Pengkompil JIT; 3. Jenis kesatuan; ; 10. Penambahbaikan konsisten. Pengenalan terperinci: 1. Pengkompil JIT, PHP8 memperkenalkan teknologi kompilasi tepat dalam masa, yang menyusun kod PHP ke dalam kod mesin asli, dengan itu meningkatkan kelajuan pelaksanaan program 2. Parameter yang dinamakan, PHP8 menyokong parameter yang dinamakan, membenarkan penggunaan nama parameter semasa memanggil fungsi dll.
