Atribut PHP (Anotasi): Penggunaan dan Contoh
Atribut PHP, yang diperkenalkan dalam Php 8, menawarkan cara deklaratif untuk menambah metadata kepada kelas, kaedah, fungsi, parameter, dan sifat. Mereka boleh digunakan sebagai pengganti komen phpDoc, yang sebelum ini merupakan cara standard untuk menyediakan metadata. Inilah cara menggunakannya:
Penggunaan Asas:
Untuk menentukan atribut tersuai, anda membuat kelas dengan atribut #[Attribute]
dan tentukan di mana ia boleh digunakan (misalnya, TARGET_CLASS
, TARGET_METHOD
).
<code class="php">#[Attribute(Attribute::TARGET_CLASS)] class MyAttribute { public function __construct(public string $value) {} } #[MyAttribute('example')] class MyClass { // Class implementation }</code>
Mendapatkan nilai atribut:
Anda boleh mengambil atribut semasa runtime menggunakan refleksi:
<code class="php">$reflectionClass = new ReflectionClass(MyClass::class); $attributes = $reflectionClass->getAttributes(MyAttribute::class); foreach ($attributes as $attribute) { $instance = $attribute->newInstance(); echo $instance->value; // Outputs: example }</code>
Bagaimanakah atribut PHP dapat meningkatkan kebolehbacaan dan kebolehkerjaan kod?
Atribut PHP meningkatkan kebolehbacaan dan kebolehkerjaan kod dalam beberapa cara:
Sintaks Deklaratif:
Atribut menawarkan sintaks yang lebih berstruktur dan boleh dibaca berbanding dengan komen phpDoc. Mereka adalah sebahagian daripada bahasa PHP itu sendiri, menjadikannya lebih mudah bagi pemaju untuk memahami metadata apa yang digunakan untuk kelas atau kaedah tanpa perlu menghuraikan komen.
<code class="php">// Less readable PHPDoc comment /** * @Route("/example") */ class MyClass {} // More readable attribute #[Route('/example')] class MyClass {}</code>
Keselamatan jenis yang lebih baik:
Kerana atribut adalah kelas, mereka mendapat manfaat daripada pemeriksaan jenis dan autocompletion dalam IDE moden. Ini mengurangkan kesilapan dan meningkatkan kecekapan pembangunan.
Metadata berpusat:
Atribut membolehkan metadata ditakrifkan di satu tempat (definisi kelas), menjadikannya lebih mudah untuk mengekalkan dan mengubah suai. Pemusatan ini mengurangkan peluang ketidakkonsistenan dan menjadikan codebase lebih dapat dipelihara.
Integrasi dengan rangka kerja dan perpustakaan:
Banyak rangka dan perpustakaan PHP moden boleh memanfaatkan atribut untuk penghalaan, pengesahan, siri, dan banyak lagi, menyelaraskan pembangunan aplikasi dan konfigurasi.
Apakah beberapa contoh praktikal menggunakan atribut PHP dalam aplikasi dunia sebenar?
Atribut PHP boleh digunakan dalam pelbagai senario praktikal:
Routing dalam Rangka Kerja Web:
Dalam rangka kerja seperti Laravel atau Symfony, atribut boleh digunakan untuk menentukan laluan secara langsung pada kaedah pengawal, meningkatkan kejelasan dan mengekalkan konfigurasi penghalaan.
<code class="php">use Symfony\Component\Routing\Annotation\Route; class BlogController { #[Route('/blog/{slug}', name: 'blog_show')] public function show(string $slug): Response { // Implementation } }</code>
Pengesahan:
Atribut boleh menentukan peraturan pengesahan secara langsung pada sifat, memudahkan proses memastikan integriti data.
<code class="php">use Symfony\Component\Validator\Constraints as Assert; class User { #[Assert\NotBlank] #[Assert\Email] public $email; }</code>
Serialization:
Dalam API, atribut dapat mengawal bagaimana objek bersiri kepada JSON atau format lain.
<code class="php">use JMS\Serializer\Annotation as Serializer; class Product { #[Serializer\SerializedName('product_id')] public $id; #[Serializer\Exclude] public $internalData; }</code>
Pembalakan:
Atribut boleh digunakan untuk menentukan tingkah laku pembalakan, seperti kaedah apa yang harus dilog masuk dan pada tahap apa.
<code class="php">use App\Logging\Annotation\Loggable; class UserService { #[Loggable(level: 'info')] public function createUser(User $user): void { // Implementation } }</code>
Bolehkah atribut PHP digunakan untuk melaksanakan suntikan ketergantungan, dan jika ya, bagaimana?
Ya, atribut PHP boleh digunakan untuk melaksanakan suntikan ketergantungan, terutamanya dalam rangka moden yang menyokong konfigurasi berasaskan atribut. Inilah caranya boleh dilakukan:
Menentukan atribut untuk suntikan ketergantungan:
Pertama, tentukan kelas atribut yang akan digunakan untuk menandakan parameter untuk suntikan.
<code class="php">#[Attribute(Attribute::TARGET_PARAMETER)] class Inject { public function __construct(public string $service) {} }</code>
Menggunakan atribut:
Kemudian, gunakan atribut pada parameter pembina atau parameter kaedah untuk menunjukkan perkhidmatan mana yang harus disuntik.
<code class="php">class UserService { private $logger; public function __construct( #[Inject('LoggerInterface')] LoggerInterface $logger ) { $this->logger = $logger; } public function createUser(User $user): void { $this->logger->info('Creating user'); // Implementation } }</code>
Melaksanakan suntikan:
Akhirnya, anda memerlukan bekas suntikan ketergantungan yang boleh memproses atribut ini dan menyuntik perkhidmatan yang betul. Inilah contoh yang mudah mengenai bagaimana bekas mungkin berfungsi:
<code class="php">class Container { public function get($className) { $reflectionClass = new ReflectionClass($className); $constructor = $reflectionClass->getConstructor(); if (!$constructor) { return new $className; } $parameters = $constructor->getParameters(); $dependencies = []; foreach ($parameters as $parameter) { $attribute = $parameter->getAttributes(Inject::class)[0] ?? null; if ($attribute) { $injectAttribute = $attribute->newInstance(); $dependencies[] = $this->get($injectAttribute->service); } else { $dependencies[] = $this->get($parameter->getType()->getName()); } } return $reflectionClass->newInstanceArgs($dependencies); } }</code>
Dalam contoh ini, kelas Container
menggunakan refleksi untuk memeriksa parameter pembina dan atribut mereka. Jika atribut Inject
dijumpai, ia menyelesaikan perkhidmatan yang ditentukan dan menyuntikkannya ke dalam contoh baru.
Dengan menggunakan atribut untuk suntikan ketergantungan, anda boleh memastikan kod anda bersih dan memberi tumpuan kepada logik perniagaan sambil membenarkan bekas untuk mengendalikan pendawaian dependensi. Pendekatan ini meningkatkan kebolehbacaan dan pemeliharaan permohonan anda.
Atas ialah kandungan terperinci Atribut PHP (anotasi): penggunaan dan contoh.. 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

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

Artikel Panas

Alat panas

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).
