你不知道的Composer加载方式
我们都知道Composer是现代PHP框架(Yii2、Laravel...)的基石,有了Composer后我们开发是一件多么的爽的事情。那么Composer加载方式你知道多少呢?下面由composer使用教程栏目给大家介绍你不知道的composer加载方式。
本文仅仅关注Composer的自动加载。
我们以Yii2为例,当我们通过Composer生成了一个Yii2程序后,会在vendor下建立一个autoload.php文件,它负责帮我们自动加载vendor内的各种库(yii2核心库也在vendor内,你懂得!)。
而你一定知道Yii2的入口文件index.php有一行。
require(__DIR__ . '/../vendor/autoload.php');
由此可见,Yii2对Composer的友好程度,也难怪~孤木不成林,Yii2也要靠无数个Composer扩展枝干才能变成参天大树。
下面开始正式讲解Composer的autoload,告诉你各式各样扩展安装后,我们并没有使用include / require,那么Composer是如何帮我们找到他们的那?
目前为止,Composer一共支持4种自动加载方式
PSR-0 PSR-4 class-map 直接包含file
这四种方式足以让Composer涵盖地球上所有的PHP第三方扩展库。
PSR是一套PHP开发标准,现在大多数主流框架都在支持,工兵连已经开专题分享PSR干货。
PSR-4
PSR-4是Composer推荐使用的一种方式,因为它更易使用并能带来更简洁的目录结构。在一个扩展的composer.json里是这样进行配置的:
{ "autoload": { "psr-4": { "Foo\\": "src/", } } }
key和value就定义出了namespace以及其对应的目录映射。按照PSR-4的规则,当试图自动加载"Foo\Bar\Baz"类的使用,会去寻找"srcBarBaz.php"这个文件,如果它存在则加载,要注意的是此时"Foo\"并不会出现在文件路径中。
而composer.json这样的配置会被Composer转换成namespace与文件目录的MAP形式,并存在vendor/composer/autoload_psr4.php文件中,所以如果你安装的某个扩展自动加载是PSR-4形式,你可以在autoload_psr4.php找到它的真实路径。
PSR-0
这是一个已经过时的标准,那是在遥远的PHP5.2时代,你我都知道,PHP5.3之后才有了类似namespace这样的高级属性,所以PSR-0更多是考虑<=5.2时代的扩展,于是乎PSR组织用了一个伪namespace的做法。
有点蒙圈么?那我们来看代码你就明白了。
{ "autoload": { "psr-0": { "Foo\\": "src/", } } }
我们来分析这个扩展的加载方式,什么是伪namespace那?当我们用这个库的时候
$model = new Foo_Bar_Baz();
对的,PSR-0的时代,有很多以下划线分隔的类名,它代表。。。它代表。。。
src/Foo/Bar/Baz.php
聪明的你一定明白什么是伪namespace了吧,通过命名的下划线来映射目录结构。
哎,那个时代的标准制定者们也真心不容易呀。
Class-map方式
{ "autoload": { "classmap": ["src/", "lib/"] } }
这个加载方式比较容易理解,当Composer开始安装扩展的时候,会根据composer.json里的这个 autoload 告诉的方式classmap,来遍历src、lib目录然后将里面的类文件和其路径一一对应,存放到vendor/composer/autoload_classmap.php内。
例如src/下有一个BaseController类,那么在autoload_classmap.php文件中,就会生成这样的配置:
'BaseController' => $baseDir . '/src/BaseController.php'
若你还不懂,去看看autoload_classmap.php吧。
File方式
有了上面这些加载方式还不够么? 是的,还会有一些供全局使用的比如帮助等这样函数,那么好吧,我们就讲这些文件直接包含进来好了。
{ "autoload": { "files": ["src/MyLibrary/functions.php"] } }
Composer安装扩展后会将其放到
vendor/composer/autoload_files.php
到此刻,世界清静了,Composer可以加载我大PHP世界的各种库,只要你想,就可以自动加载。
Atas ialah kandungan terperinci 你不知道的Composer加载方式. 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

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

Laravel adalah rangka kerja PHP untuk membina aplikasi web yang mudah. Ia menyediakan pelbagai ciri yang kuat termasuk: Pemasangan: Pasang Laravel CLI secara global dengan komposer dan buat aplikasi dalam direktori projek. Routing: Tentukan hubungan antara URL dan pengendali dalam laluan/web.php. Lihat: Buat pandangan dalam sumber/pandangan untuk menjadikan antara muka aplikasi. Integrasi Pangkalan Data: Menyediakan integrasi keluar-of-the-box dengan pangkalan data seperti MySQL dan menggunakan penghijrahan untuk membuat dan mengubah suai jadual. Model dan Pengawal: Model mewakili entiti pangkalan data dan proses pengawal permintaan HTTP.

Apabila membangunkan laman web yang menggunakan CraftCMS, anda sering menghadapi masalah caching fail sumber, terutamanya apabila anda sering mengemas kini fail CSS dan JavaScript, versi lama fail mungkin masih di -cache oleh penyemak imbas, menyebabkan pengguna tidak melihat perubahan terkini dalam masa. Masalah ini bukan sahaja memberi kesan kepada pengalaman pengguna, tetapi juga meningkatkan kesukaran pembangunan dan debugging. Baru-baru ini, saya menghadapi masalah yang sama dalam projek saya, dan selepas beberapa penjelajahan, saya dapati plugin Wiejeben/Craft-Laravel-Mix, yang sempurna menyelesaikan masalah caching saya.

Apabila membangunkan laman web e-dagang, saya menghadapi masalah yang sukar: bagaimana menyediakan pengguna dengan cadangan produk yang diperibadikan. Pada mulanya, saya mencuba beberapa algoritma cadangan mudah, tetapi hasilnya tidak sesuai, dan kepuasan pengguna juga terjejas. Untuk meningkatkan ketepatan dan kecekapan sistem cadangan, saya memutuskan untuk menggunakan penyelesaian yang lebih profesional. Akhirnya, saya memasang Andres-Montanez/Cadangan-Bundle melalui komposer, yang bukan sahaja menyelesaikan masalah saya, tetapi juga meningkatkan prestasi sistem cadangan. Anda boleh belajar komposer melalui alamat berikut:

Saya menghadapi masalah yang rumit ketika melakukan kempen pemasaran mel: bagaimana untuk membuat dan menghantar surat dengan cekap dalam format HTML. Pendekatan tradisional adalah untuk menulis kod secara manual dan menghantar e-mel menggunakan pelayan SMTP, tetapi ini bukan sahaja memakan masa, tetapi juga rawan ralat. Selepas mencuba pelbagai penyelesaian, saya dapati Duwa.io, sebuah Restapi yang mudah dan mudah digunakan yang membantu saya membuat dan menghantar surat HTML dengan cepat. Untuk memudahkan proses pembangunan, saya memutuskan untuk menggunakan komposer untuk memasang dan mengurus perpustakaan PHP Duwa.io - Captaindoe/Duwa.

Saya mempunyai masalah yang sukar apabila mengerjakan projek dengan sejumlah besar entiti doktrin: Setiap kali entiti bersiri dan deserialized, prestasi menjadi sangat tidak cekap, mengakibatkan peningkatan yang signifikan dalam masa tindak balas sistem. Saya telah mencuba pelbagai kaedah pengoptimuman, tetapi ia tidak berfungsi dengan baik. Nasib baik, dengan menggunakan Sidus/Doctrine-Serializer-Bundle, saya berjaya menyelesaikan masalah ini, dengan ketara meningkatkan prestasi projek.

Apabila membangunkan platform e-dagang, adalah penting untuk memilih rangka kerja dan alat yang betul. Baru-baru ini, ketika saya cuba membina laman web e-dagang yang kaya dengan ciri-ciri, saya menghadapi masalah yang sukar: bagaimana dengan cepat membina platform e-dagang yang berskala dan berfungsi sepenuhnya. Saya mencuba pelbagai penyelesaian dan akhirnya memilih template projek lanjutan FECMALL (FECMALL/FBBCBASE-APP-Advanced). Dengan menggunakan komposer, proses ini menjadi sangat mudah dan cekap. Komposer dapat dipelajari melalui alamat berikut: Alamat Pembelajaran

Untuk memasang Laravel, ikuti langkah -langkah berikut dalam urutan: Pasang komposer (untuk macOS/linux dan windows) Pasang pemasang Laravel Buat aplikasi akses perkhidmatan permulaan projek baru (URL: http://127.0.0.1:8000) Sediakan sambungan pangkalan data (jika diperlukan)

Ringkasan Artikel: Artikel ini menyediakan arahan langkah demi langkah terperinci untuk membimbing pembaca tentang cara memasang rangka kerja Laravel dengan mudah. Laravel adalah rangka kerja PHP yang kuat yang mempercepat proses pembangunan aplikasi web. Tutorial ini merangkumi proses pemasangan dari keperluan sistem untuk mengkonfigurasi pangkalan data dan menyediakan penghalaan. Dengan mengikuti langkah -langkah ini, pembaca dapat dengan cepat dan cekap meletakkan asas yang kukuh untuk projek Laravel mereka.
