Jadual Kandungan
Apa itu enum?
Meningkatkan Keselamatan Jenis: Dari "Nilai Magic" hingga Jenis Eksplisit
Enums yang disokong: Nilai skalar mengikat
Kaedah penghitungan dan sambungan tingkah laku
Cadangan sebenar dan senario penggunaan
Meringkaskan
Rumah pembangunan bahagian belakang tutorial php Php 8.1 Enums: Paradigma baru untuk pemalar jenis selamat

Php 8.1 Enums: Paradigma baru untuk pemalar jenis selamat

Jul 28, 2025 am 04:43 AM
PHP Data Types

Enums yang diperkenalkan dalam Php 8.1 menyediakan koleksi berterusan yang selamat, menyelesaikan masalah nilai sihir; 1. Gunakan enum untuk menentukan pemalar tetap, seperti status :: draf, untuk memastikan bahawa hanya nilai yang telah ditetapkan hanya tersedia; 2. Mengikat enums ke rentetan atau bilangan bulat melalui enum yang disokong, dan sokongan dari () dan tryfrom () untuk menukar antara skalar dan enum; 3. Penghitungan boleh menentukan kaedah dan tingkah laku, seperti warna () dan tidak dapat dielakkan (), untuk meningkatkan enkapsulasi logik perniagaan; 4. Berkenaan dengan senario statik seperti negeri dan konfigurasi, bukan untuk data dinamik; 5. Ia boleh melaksanakan antara muka Unitenum atau Backedenum untuk kekangan jenis, meningkatkan keteguhan kod dan sokongan IDE, yang merupakan ciri penting dalam pembangunan PHP moden.

Php 8.1 Enums: Paradigma baru untuk pemalar jenis selamat

Php 8.1 memperkenalkan enums (enums) , yang menandakan satu langkah penting ke hadapan dalam PHP dari segi keselamatan jenis dan pemantauan kod. Pada masa lalu, kita sering menggunakan pemalar kelas atau pemalar global untuk mensimulasikan prestasi yang dikodkan, tetapi kaedah ini kekurangan kekangan jenis, tidak dapat menghalang nilai -nilai haram daripada diluluskan, dan sukar untuk mendapatkan petunjuk yang baik dalam IDE. Kemunculan enum adalah tepat untuk menyelesaikan masalah ini.

Php 8.1 Enums: Paradigma baru untuk pemalar jenis selamat

Apa itu enum?

Penghitungan adalah jenis data khas yang digunakan untuk menentukan satu set pemalar yang dinamakan. Dalam Php 8.1, enum menjadi kata kunci yang disokong oleh bahasa, yang membolehkan anda menentukan jenis yang nilainya hanya boleh menjadi salah satu daripada beberapa pilihan yang telah ditetapkan.

 status enum
{
    draf kes;
    kes yang diterbitkan;
    kes diarkibkan;
}

Sekarang, Status::Draft , Status::Published dan Status::Archived adalah satu -satunya nilai undang -undang. Anda tidak lagi boleh lulus rentetan atau nombor seperti 'draft' atau 1 pada kehendak - ini sangat meningkatkan keselamatan jenis.

Php 8.1 Enums: Paradigma baru untuk pemalar jenis selamat

Meningkatkan Keselamatan Jenis: Dari "Nilai Magic" hingga Jenis Eksplisit

Sebelum ada penghitungan, kita sering melihat kod seperti ini:

 fungsi setStatus (String $ status): void {
    jika (! in_array (status $, ['draf', 'diterbitkan', 'diarkibkan'])) {
        membuang InvalidArgumentException baru ('status tidak sah');
    }
    // ...
}

Masalah dengan penulisan ini adalah:

Php 8.1 Enums: Paradigma baru untuk pemalar jenis selamat
  • 'draft' adalah "rentetan sihir" yang mudah dieja.
  • Tiada pemeriksaan masa kompilasi, dan kesilapan hanya boleh didapati semasa runtime.
  • IDE tidak dapat menyimpulkan nilai undang -undang.

Setelah menggunakan enum:

 fungsi setStatus (status status $): void {
    // Sistem jenis memastikan bahawa nilai enum status undang -undang}

// setStatus (status :: draf);

Sekarang, jika anda lulus dalam nilai haram, PHP akan secara langsung melaporkan ralat (terutamanya apabila jenis ketat diaktifkan), dan IDE juga boleh memberikan arahan penyelesaian dan ralat automatik.


Enums yang disokong: Nilai skalar mengikat

Kadang -kadang kita mahu nilai enum sesuai dengan rentetan atau integer tertentu (seperti yang disimpan dalam pangkalan data). Php 8.1 menyediakan enum yang disokong untuk menyokong ini.

 Enum Orderstatus: String
{
    kes menunggu = 'menunggu';
    kes dihantar = 'dihantar';
    kes dihantar = 'dihantar';
}

Anda boleh dengan mudah menukar antara enum dan skalar:

 // Buat enum dari rentetan $ status = orderstatus :: dari ('menunggu'); // kembali Orderstatus :: menunggu
$ status = Orderstatus :: tryfrom ('tidak diketahui'); // kembali null (tiada pengecualian dilemparkan)

// Dapatkan nilai asas echo $ status-> nilai; // output 'menunggu'

Ini sangat praktikal dalam mengendalikan pangkalan data, permintaan API dan senario lain - anda boleh menukar rentetan dengan selamat ke dalam enum, dan kemudian gunakan jenis arahan untuk memastikan logik berikutnya adalah betul.


Kaedah penghitungan dan sambungan tingkah laku

Penghitungan bukan sahaja boleh mengandungi pemalar, tetapi juga menentukan kaedah dan juga melaksanakan antara muka.

 status enum
{
    draf kes;
    kes yang diterbitkan;
    kes diarkibkan;

    Warna Fungsi Awam (): String
    {
        perlawanan kembali ($ ini) {
            diri sendiri :: draf => 'kelabu',
            Self :: diterbitkan => 'Hijau',
            Self :: Archived => 'Red',
        };
    }

    Fungsi awam tidak dapat dipertahankan (): bool
    {
        kembali $ this === self :: draf || $ this === self :: diterbitkan;
    }
}

Contoh Penggunaan:

 status echo :: draf-> warna (); // kelabu
var_dump (status :: archived-> isedable ()); // palsu

Ini menjadikan enum lebih daripada sekadar "set nilai" tetapi boleh membawa tingkah laku dan menjadi sebahagian daripada model domain sebenar.


Cadangan sebenar dan senario penggunaan

  • ✅Status Fields : Status Pesanan, Status Artikel, Peranan Pengguna, dll.
  • Pilihan Konfigurasi: Contoh OutputFormat::Json , OutputFormat::Xml .
  • Bentuk Pengesahan Input : Gunakan dalam kombinasi dengan DTO untuk memastikan nilai input tergolong dalam set undang -undang.
  • ❌ Jangan penyalahgunaan: Jika nilai dinamik (seperti dari jadual konfigurasi pangkalan data), ia tidak sesuai untuk penghitungan.

Petua: Anda boleh membiarkan enum melaksanakan antara muka UnitEnum atau BackedEnum untuk melakukan jenis kekangan, sebagai contoh:

 Fungsi ProcessEnum (Unitenum $ enum): void {...}

Meringkaskan

Enums Php 8.1 bukan sekadar gula sintaks, ia membawa keselamatan jenis yang benar, kebolehbacaan yang lebih baik dan sokongan alat yang lebih kuat. Dengan menghapuskan "nilai sihir" dan meningkatkan keteguhan kod, ia mengubah cara kita mengatur pemalar dan negara.

Pada dasarnya semua ini - ia tidak rumit, tetapi apabila ia digunakan, ia tidak boleh dikembalikan.

Atas ialah kandungan terperinci Php 8.1 Enums: Paradigma baru untuk pemalar jenis selamat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Memodenkan asas kod anda dengan jenis kesatuan Php 8 Memodenkan asas kod anda dengan jenis kesatuan Php 8 Jul 27, 2025 am 04:33 AM

Upgradephp7.xcodeBasestophp8 ByReplacingphpdoc-sugestedTypeslike@paramstring | intwithnationtypesstring

Dualitas PHP: Menavigasi Pengikatan Longgar vs Pengisytiharan Jenis Tegas Dualitas PHP: Menavigasi Pengikatan Longgar vs Pengisytiharan Jenis Tegas Jul 26, 2025 am 09:42 AM

PHP menyokong kewujudan bersama jenis longgar dan jenis yang ketat, yang merupakan ciri utama evolusi dari bahasa skrip ke bahasa pengaturcaraan moden. 1. Jenis longgar sesuai untuk prototaip pesat, mengendalikan input pengguna dinamik, atau dok dengan API luaran, tetapi terdapat masalah seperti risiko penukaran jenis tersirat, kesukaran dalam penyahpepijatan dan sokongan alat yang lemah. 2. Jenis ketat didayakan dengan mengisytiharkan (strict_types = 1), yang dapat mengesan kesilapan terlebih dahulu, meningkatkan kebolehbacaan kod dan sokongan IDE, dan sesuai untuk senario dengan keperluan yang tinggi untuk logik perniagaan teras, kerjasama pasukan dan integriti data. 3. Penggunaan campuran harus digunakan dalam pembangunan sebenar: Jenis ketat didayakan secara lalai, jenis longgar hanya digunakan apabila perlu di sempadan input, dan pengesahan dan penukaran jenis dilakukan secepat mungkin. 4. Amalan yang disyorkan termasuk menggunakan phpsta

Peril Precision: Mengendalikan nombor terapung di PHP Peril Precision: Mengendalikan nombor terapung di PHP Jul 26, 2025 am 09:41 AM

0.1 0.2!==0.3inPHPduetobinaryfloating-pointprecisionlimitations,sodevelopersmustavoiddirectcomparisonsanduseepsilon-basedchecks,employBCMathorGMPforexactarithmetic,storecurrencyinintegerswhenpossible,formatoutputcarefully,andneverrelyonfloatprecision

Dari `Campuran` ke` void`: Panduan Praktikal untuk PHP REBAT Type Declarations Dari `Campuran` ke` void`: Panduan Praktikal untuk PHP REBAT Type Declarations Jul 27, 2025 am 12:11 AM

ReturntypesinphpimproveCodereliabilityandclarityByspecifyingWhatAfunctionMustreturn.2.usebasictypeslikestring, array, ordatetimetoenforcorcorcorcreturnvaluesandcatcherrorsarly.3.applynullableTypesWith?,?

Memahami jenis pseudo `callable` dan pelaksanaannya Memahami jenis pseudo `callable` dan pelaksanaannya Jul 27, 2025 am 04:29 AM

AcallableInphpisapseudo-typerepresentingAnyAndyveTatCanbeinvokedusingThe () operator, digunakan untuk digunakan semula

Php 8.1 Enums: Paradigma baru untuk pemalar jenis selamat Php 8.1 Enums: Paradigma baru untuk pemalar jenis selamat Jul 28, 2025 am 04:43 AM

Enums yang diperkenalkan dalam Php8.1 menyediakan koleksi berterusan yang selamat, menyelesaikan masalah nilai sihir; 1. Gunakan enum untuk menentukan pemalar tetap, seperti status :: draf, untuk memastikan bahawa hanya nilai yang telah ditetapkan hanya tersedia; 2. Mengikat enums ke rentetan atau bilangan bulat melalui backedenums, dan penukaran sokongan dari () dan tryfrom () antara skalar dan enum; 3. Enums boleh menentukan kaedah dan tingkah laku, seperti warna () dan tidak dapat dielakkan (), untuk meningkatkan enkapsulasi logik perniagaan; 4. Berkenaan dengan senario statik seperti negeri dan konfigurasi, bukan untuk data dinamik; 5. Ia boleh melaksanakan antara muka unitenum atau backedenum untuk kekangan jenis, meningkatkan keteguhan kod dan sokongan IDE, dan

Kehidupan pembolehubah: Struktur `zval` dalaman PHP dijelaskan Kehidupan pembolehubah: Struktur `zval` dalaman PHP dijelaskan Jul 27, 2025 am 03:47 AM

PHP menggunakan struktur zval untuk menguruskan pembolehubah. Jawapannya ialah: 1. Zval mengandungi nilai, jenis dan metadata, dengan saiz 16 bait; 2. Apabila jenis berubah, hanya kesatuan dan maklumat jenis perlu dikemas kini; 3. Jenis Kompleks merujuk kepada struktur dengan jumlah rujukan melalui petunjuk; 4. Apabila memberikan nilai, salinan digunakan untuk mengoptimumkan memori; 5. Rujukan membuat pembolehubah berkongsi zval yang sama; 6. Rujukan kitar semula diproses oleh pemungut sampah khas. Ini menerangkan mekanisme asas tingkah laku pembolehubah PHP.

Pengurusan Sumber di PHP: Kitaran hayat jenis `sumber` Pengurusan Sumber di PHP: Kitaran hayat jenis `sumber` Jul 27, 2025 am 04:30 AM

Kitaran hayat sumber PHP dibahagikan kepada tiga peringkat: 1. 2. Penggunaan sumber, lulus sumber kepada fungsi yang berkaitan untuk operasi, peta PHP ke struktur sistem asas melalui ID sumber; 3. Kemusnahan sumber, secara manual memanggil fclose, curl_close dan fungsi lain harus diberi keutamaan untuk melepaskan sumber untuk mengelakkan bergantung pada pengumpulan sampah automatik untuk mencegah deskriptor fail dari meletihkan. Amalan terbaik termasuk: Sentiasa Sumber Secara Ringkas, Gunakan Cuba ... Akhirnya memastikan pembersihan, mengutamakan objek seperti PDO yang menyokong __destruct, elakkan sumber penyimpanan global, dan memantau sumber aktif melalui get_resources ()

See all articles