


Artikel ini akan memberi anda pemahaman yang mendalam tentang generik dalam PHP dan memperkenalkan dua contoh generik saya harap ia akan membantu anda!
Deeper Generics
Saya menunjukkan generik yang sangat membosankan dalam artikel terdahulu saya Contoh, kita akan lakukan lebih baik dalam yang ini.
$users = new Collection<User>(); $slugs = new Collection<string>();
Mereka mungkin cara paling mudah untuk menerangkan generik, tetapi mereka juga merupakan contoh yang dibincangkan oleh semua orang semasa membincangkan generik. Orang sering menganggap "generik" dan "koleksi bertaip" sebagai perkara yang sama. Sama sekali tidak begitu. 集合
function app(string $className): mixed { return Container::get($className); }Sekarang, anda tidak perlu tahu cara bekas itu berfungsi, yang penting fungsi ini akan memberi anda contoh kelas yang anda minta. Jadi, pada asasnya, ia adalah fungsi generik; jenis pulangan bergantung pada nama kelas yang anda berikan. Alangkah baiknya jika IDE kami dan penganalisis statik lain juga memahami bahawa jika saya memberikan fungsi ini nama kelas "UserRepository", saya mahukan contoh UserRepository dikembalikan dan tidak ada yang lain:
function app(string $className): mixed { /* … */ } app(UserRepository::class); // ?Nah, generik membenarkan kita untuk berbuat demikian. Saya fikir sekarang adalah masa yang baik untuk menyatakan bahawa saya telah menyimpan rahsia, seperti: Saya telah menyebut dalam catatan saya sebelum ini bahawa generik tidak wujud dalam PHP, itu tidak sepenuhnya benar. Semua penganalisis statik di luar sana - alat yang membaca kod tanpa menjalankannya, alat seperti IDE anda - mereka membenarkan penggunaan komen blok dokumen untuk generik:
/** * @template Type * @param class-string<Type> $className * @return Type */ function app(string $className): mixed { /* … */ }Diakui: Ini bukan sintaks yang paling sempurna, semua penganalisis statik bergantung pada protokol mudah, iaitu tiada sintaks kanonik rasmi bagaimanapun: ia berfungsi. Tiga daripada penganalisis statik terbesar di dunia PHP: PhpStorm, Psalm dan PhpStan, semuanya memahami sintaks ini sedikit sebanyak. IDE seperti PhpStorm menggunakannya untuk memberikan maklum balas kepada pengaturcara semasa mereka menulis kod, manakala alatan seperti Psalm dan PhpStan menggunakannya untuk menganalisis secara pukal asas kod anda dan mengesan potensi pepijat, Terutamanya berdasarkan definisi jenis. Jadi sebenarnya, kita boleh membina fungsi
ini supaya alat kita tidak lagi berjalan dalam gelap. Sudah tentu, PHP sendiri tidak dapat menjamin bahawa jenis pulangan adalah betul, kerana PHP tidak akan menaip semak fungsi semasa runtime bagaimanapun, jika kita boleh mempercayai bahawa penganalisis statik kami adalah betul, maka apabila menjalankannya, perenggan ini Terdapat kod yang sangat sedikit; - tiada peluang gangguan. app
Attributes::in(MyController::class) ->filter(RouteAttribute::class) ->newInstance() ->Di sini kita mempunyai kelas yang boleh "mempertanyakan" sifat dan membuat seketika mereka. Saya dapati kelas pembantu ini sangat berguna jika anda telah menggunakan sifat sebelum mengetahui bahawa API pantulan mereka agak bertele-tele. Apabila kami menggunakan kaedah
, kami memberikannya nama kelas untuk sifat itu; kemudian memanggil kaedah filter
, kami tahu bahawa hasilnya akan menjadi contoh kelas penapis kami. Sekali lagi: adalah bagus jika IDE kami memahami perkara yang kami bincangkan. newInstance
/** @template AttributeType */ class Attributes { /** * @template InputType * @param class-string<InputType> $className * @return self<InputType> */ public function filter(string $className): self { /* … */ } /** * @return AttributeType */ public function newInstance(): mixed { /* … */ } // … }Saya harap anda mula melihat kuasa maklumat jenis mudah. Beberapa tahun yang lalu saya memerlukan pemalam IDE untuk membuat cerapan ini berfungsi, kini saya hanya perlu menambah beberapa jenis maklumat. Walau bagaimanapun, contoh terbaharu ini tidak hanya bergantung pada generik, terdapat satu lagi bahagian yang sama pentingnya. Jenis inferens: Keupayaan penganalisis statik untuk "meneka" - atau menentukan dengan pasti - jenis tanpa pengguna menyatakannya. Itulah yang berlaku dengan anotasi seperti rentetan di sana. IDE kami dapat mengenali input yang kami sediakan untuk fungsi ini sebagai nama kelas dan membuat kesimpulan jenis sebagai jenis generik. Jadi, semuanya telah diselesaikan, betul: Terdapat generik dalam PHP dan semua penganalisis statik utama tahu cara menggunakannya. Nah...ada beberapa kaveat. Pertama sekali, tiada spesifikasi rasmi tentang rupa generik, kini setiap penganalisis statik boleh menggunakan sintaks mereka sendiri pada masa ini, mereka telah bersetuju dengan salah satu daripadanya; .
Kedua: Sekatan dokumen adalah sub-optimum pada pendapat saya. Mereka berasa kurang penting dalam asas kod kami. Sudah tentu, anotasi generik hanya memberikan cerapan statik dan tiada fungsi masa jalan, tetapi kami telah melihat kuasa analisis statik walaupun tanpa pemeriksaan jenis masa jalan. Saya fikir adalah tidak adil untuk menganggap maklumat jenis sebagai "komen dokumentasi", ia tidak menyampaikan kepentingan jenis ini dalam kod kami. Itulah sebabnya kami mendapat atribut dalam PHP8: semua kefungsian yang disediakan oleh atribut, adalah mungkin dalam ulasan docblock, tetapi ia tidak cukup baik. Perkara yang sama berlaku untuk generik.
Nota akhir: tanpa spesifikasi yang betul, ketiga-tiga penganalisis statik utama mempunyai perbezaan antara pelaksanaan generiknya. PhpStorm adalah yang paling kurang pada masa ini. Sebaik-baiknya, akan ada spesifikasi rasmi dari dalam PHP. Tetapi belum ada yang rasmi lagi.
Ini ialah sebab utama mengapa saya fikir ia berbaloi untuk melaburkan masa dalam penyelesaian yang lebih tahan lama dan lebih mampan. Jadi mengapa PHP belum mempunyai generik yang betul? Mengapa kita bergantung pada bahagian dokumentasi tanpa spesifikasi yang jelas?
Alamat asal: https://stitcher.io/blog/generics-in-php-2
Alamat terjemahan: https://learnku.com/php/t/ 66484
Disyorkan: "Tutorial Video PHP"
Atas ialah kandungan terperinci Ketahui lebih lanjut tentang generik dalam PHP dengan contoh. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

PHP kekal sebagai alat yang kuat dan digunakan secara meluas dalam pengaturcaraan moden, terutamanya dalam bidang pembangunan web. 1) PHP mudah digunakan dan diintegrasikan dengan lancar dengan pangkalan data, dan merupakan pilihan pertama bagi banyak pemaju. 2) Ia menyokong penjanaan kandungan dinamik dan pengaturcaraan berorientasikan objek, sesuai untuk membuat dan mengekalkan laman web dengan cepat. 3) Prestasi PHP dapat ditingkatkan dengan caching dan mengoptimumkan pertanyaan pangkalan data, dan komuniti yang luas dan ekosistem yang kaya menjadikannya masih penting dalam timbunan teknologi hari ini.

Dalam PHP, rujukan lemah dilaksanakan melalui kelas lemah dan tidak akan menghalang pemungut sampah daripada menebus objek. Rujukan lemah sesuai untuk senario seperti sistem caching dan pendengar acara. Harus diingat bahawa ia tidak dapat menjamin kelangsungan hidup objek dan pengumpulan sampah mungkin ditangguhkan.

Kaedah \ _ \ _ membolehkan objek dipanggil seperti fungsi. 1. Tentukan kaedah \ _ \ _ supaya objek boleh dipanggil. 2. Apabila menggunakan sintaks $ OBJ (...), PHP akan melaksanakan kaedah \ _ \ _ invoke. 3. Sesuai untuk senario seperti pembalakan dan kalkulator, meningkatkan fleksibiliti kod dan kebolehbacaan.

Serat diperkenalkan dalam Php8.1, meningkatkan keupayaan pemprosesan serentak. 1) Serat adalah model konkurensi ringan yang serupa dengan coroutine. 2) Mereka membenarkan pemaju mengawal aliran pelaksanaan tugas secara manual dan sesuai untuk mengendalikan tugas I/O-intensif. 3) Menggunakan serat boleh menulis kod yang lebih cekap dan responsif.

Komuniti PHP menyediakan sumber dan sokongan yang kaya untuk membantu pemaju berkembang. 1) Sumber termasuk dokumentasi rasmi, tutorial, blog dan projek sumber terbuka seperti Laravel dan Symfony. 2) Sokongan boleh didapati melalui saluran StackOverflow, Reddit dan Slack. 3) Trend pembangunan boleh dipelajari dengan mengikuti RFC. 4) Integrasi ke dalam masyarakat dapat dicapai melalui penyertaan aktif, sumbangan kepada kod dan perkongsian pembelajaran.

PHP dan Python masing -masing mempunyai kelebihan sendiri, dan pilihannya harus berdasarkan keperluan projek. 1.Php sesuai untuk pembangunan web, dengan sintaks mudah dan kecekapan pelaksanaan yang tinggi. 2. Python sesuai untuk sains data dan pembelajaran mesin, dengan sintaks ringkas dan perpustakaan yang kaya.

PHP tidak mati, tetapi sentiasa menyesuaikan diri dan berkembang. 1) PHP telah menjalani beberapa lelaran versi sejak tahun 1994 untuk menyesuaikan diri dengan trend teknologi baru. 2) Ia kini digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan bidang lain. 3) Php8 memperkenalkan pengkompil JIT dan fungsi lain untuk meningkatkan prestasi dan pemodenan. 4) Gunakan OPCACHE dan ikut piawaian PSR-12 untuk mengoptimumkan prestasi dan kualiti kod.

Masa depan PHP akan dicapai dengan menyesuaikan diri dengan trend teknologi baru dan memperkenalkan ciri -ciri inovatif: 1) menyesuaikan diri dengan pengkomputeran awan, kontena dan seni bina microservice, menyokong Docker dan Kubernetes; 2) memperkenalkan pengkompil JIT dan jenis penghitungan untuk meningkatkan prestasi dan kecekapan pemprosesan data; 3) Berterusan mengoptimumkan prestasi dan mempromosikan amalan terbaik.


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

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma