Rumah >pembangunan bahagian belakang >tutorial php >Atribut PHP: cara menggunakan Atribut PHP dan mencipta kelas atribut tersuai – Petua Pantas

Atribut PHP: cara menggunakan Atribut PHP dan mencipta kelas atribut tersuai – Petua Pantas

WBOY
WBOYasal
2024-08-23 16:30:321019semak imbas

Atribut PHP telah diperkenalkan dalam PHP 8.0. Versi ini menandakan peristiwa penting untuk bahasa, membawa beberapa ciri dan penambahbaikan baharu, termasuk pengenalan atribut untuk menambahkan metadata pada pengisytiharan kod.

Kali pertama saya perlu berurusan dengan atribut adalah disebabkan oleh isu dalam pustaka PHP Inspektor. Semak pada GitHub. Sebelum mendalami penyelesaiannya, mari kita lihat gambaran keseluruhan tentang sifat-sifat itu dan cara ia boleh digunakan dalam kod PHP anda.

Atribut ialah ciri berkuasa yang membolehkan anda menambahkan metadata pada pengisytiharan seperti kelas, kaedah atau sifat. Metadata ini boleh diambil semula secara pengaturcaraan, membuka kemungkinan baharu untuk kod yang lebih bersih, teratur dan cekap.

Ingat, Atribut tidak mempunyai kesan pada masa jalan. Ia akan tersedia dalam API Refleksi untuk menyedarkan aplikasi anda tentang perkara yang ingin anda jalankan berdasarkan atribut yang dilampirkan pada kelas, kaedah atau sifat.

Atribut Terbina dalam

PHP disertakan dengan beberapa atribut terbina dalam yang mempunyai tujuan yang berbeza. Berikut adalah beberapa yang ketara:

@tidak digunakan lagi

Menandai fungsi atau kaedah sebagai tidak digunakan, menandakan bahawa ia harus dielakkan kerana ia mungkin dialih keluar dalam versi akan datang.

#[Deprecated("Use newFunction() instead")]
function oldFunction() 
{
    // Function implementation
}

@override

Memastikan kaedah dalam kelas kanak-kanak bertujuan untuk mengatasi kaedah dalam kelas induk.

class Child extends Parent {
    #[Override]
    public function defaultMethod() 
    {
        // Method implementation
    }
}

Jika defaultMethod() akhirnya akan menukar namanya dalam kelas induk, ini bukan lagi penggantian. Dalam kes ini, PHP akan menimbulkan amaran kerana kami secara eksplisit mengisytiharkan kami menjangkakan sebagai penggantian dan memaklumkan kami tentang salah jajaran.

Apa pun, IDE yang baik seharusnya membolehkan kita tidak melakukan kesilapan seperti ini.

@SuppressWarnings

Mencegah amaran khusus untuk sekeping kod tertentu.

#[SuppressWarnings("SomeWarning")]
function someFunction() 
{
    // Function implementation
}

Mencipta Kelas Atribut Tersuai

Sekarang, mari buat kelas atribut tersuai. Ini berfaedah apabila anda ingin merangkum gelagat tertentu dalam atribut.

#[Attribute]
class CustomAttribute 
{
    public string $message;

    public function __construct(string $message) 
    {
        $this->message = $message;
    }
}

Anda kemudian boleh menggunakan atribut tersuai ini pada pelbagai elemen:

class MyClass 
{
    #[CustomAttribute("This is a custom attribute")]
    public $myProperty;

    #[CustomAttribute("Another custom attribute")]
    public function myMethod() 
    {
        // Method implementation
    }
}

Contoh Penggunaan

Mari kita terokai contoh praktikal. Katakan anda sedang membina aplikasi web dan anda ingin mencipta atribut tersuai untuk menentukan panjang rentetan:

#[Attribute(Attribute::TARGET_PROPERTY)]
class MaxLength 
{
    public int $maxLength;

    public function __construct(int $maxLength) 
    {
        $this->maxLength = $maxLength;
    }
}

Dalam contoh di atas kami mengehadkan keupayaan untuk menggunakan atribut hanya pada sifat kelas. Kini kita boleh menggunakannya dalam kelas Pengguna:

class User 
{
    #[MaxLength(20, message: "Username must be 20 characters or less")]
    public string $username;

    // Other properties and methods
}

Seperti yang dinyatakan sebelum menambah atribut pada harta tidak mempunyai kesan semasa pelaksanaan. Tetapi kini kita boleh mendapatkan semula maklumat ini menggunakan refleksi untuk mengambil beberapa tindakan akhirnya.

Penggunaan oleh rangka kerja PHP

Rangka kerja PHP yang paling banyak digunakan seperti Symfony dan Laravel sudah menggunakan atribut untuk menggantikan "Anotasi". Dalam Symfony 5.2 atau lebih tinggi anda boleh mengisytiharkan pengawal dan menyambungkannya ke laluan menggunakan atribut:

public class Arrayable implements \ArrayAccess
{
    …

    public function offsetExists($offset)
    {
        return isset($this->data[$offset]);
    }

    …
}

Sejak PHP 8 definisi antara muka ArrayAccess ditukar kepada:

PHP Attributes: how to use PHP Attributes and create custom attribute classes – Fast Tips

Dengan menggunakan atribut mereka menguatkuasakan pengisytiharan jenis data untuk argumen dalam fungsi offset. Menggunakan atribut LanguageLevelTypeAware, jika pelaksanaan tidak menyediakan jenis data untuk argumen, ia mencetuskan "amaran penamatan".

Tetapi mengisytiharkan jenis data dalam argumen fungsi memecahkan keserasian dengan versi lama PHP yang tidak menyokong pengisytiharan jenis data argumen.

Memandangkan ia hanya amaran untuk perubahan masa hadapan, kami menyelesaikan masalah dengan atribut PHP terbina dalam yang lain untuk menyekat amaran:

public class Arrayable implements \ArrayAccess
{
    …

    #[\ReturnTypeWillChange]
    public function offsetExists($offset)
    {
        return isset($this->data[$offset]);
    }

    …
}

Atribut ReturnTypeWillChange hanya memberitahu PHP bahawa kami tahu tentang perubahan masa depan dalam bahasa dan kami telah merancang kemas kini yang diperlukan.

Untuk perubahan ini khususnya, ia pasti akan dilaksanakan dalam PHP 9.

Ingat untuk menggunakan atribut dengan bijak, memastikan pangkalan kod anda bersih dan didokumentasikan dengan baik. Ini amat penting dalam pembangunan produk SaaS di mana kebolehskalaan, kebolehselenggaraan dan kecekapan adalah diutamakan.

Baru Kepada Inspektor? Pantau aplikasi anda secara percuma

Inspektor ialah alat Pemantauan Pelaksanaan Kod yang direka khusus untuk pembangun perisian. Anda tidak perlu memasang apa-apa di peringkat pelayan, cuma pasang pakej komposer dan anda sudah bersedia untuk pergi.

Tidak seperti platform lain yang kompleks, semua-dalam-satu, Inspektor sangat mudah dan mesra PHP. Anda boleh mencuba pakej Laravel atau Symfony kami.

Jika anda mencari automasi yang berkesan, cerapan mendalam dan keupayaan untuk memajukan makluman dan pemberitahuan ke dalam persekitaran pemesejan anda cuba Inspektor secara percuma. Daftar akaun anda.

Atau ketahui lebih lanjut di tapak web: https://inspector.dev

PHP Attributes: how to use PHP Attributes and create custom attribute classes – Fast Tips

Atas ialah kandungan terperinci Atribut PHP: cara menggunakan Atribut PHP dan mencipta kelas atribut tersuai – Petua Pantas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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
Artikel sebelumnya:. Pelengkap NomborArtikel seterusnya:. Pelengkap Nombor