require 文件很麻煩,使用PSR-4搭配composer一次加載,終生受用。感受相似java中的import了,本身先記錄一下最近理解的。php
用composer管理本身的包吧html
安裝composerjava
這個很少贅述linux
英文版教程git
中文版教程github
PSR-4-autoloaderjson
|-projectwindows
|-src瀏覽器
|-View.phpapp
|-app
|-Tools.php
|-composer.json
上面路徑的View.php在project/src/View.php 中,其餘同理,View 和 Tools 只是爲了作演示用的。
打開建立的composer.json文件輸入,這裏拿monolog作例子。
{
"require": {
"monolog/monolog": "1.2.*"
}
}
在目錄所在的命令行中輸入
#linux全局安裝下使用該命令 composer install #windows下使用參考前面的composer教程 composer.phar install
加載完畢以後你的目錄應該是這樣的
|-project
|-src
|-View.php
|-app
|-Tools.php
|-vendor
|-composer/* composer目錄下面的文件不在贅述
|-monolog/* 同理
|-autoload.php
|-composer.json
|-composer.lock
在project目錄下建立一個index.php
#index.php <?php /** * Created by PhpStorm. * User: EasyChris<chris@afox.cc> * Date: 2017/1/22 * Time: 10:50 */ //引入autoload.php文件 require_once 'vendor/autoload.php'; //測試monlog $log = new MonologLogger('name'); $log->pushHandler(new MonologHandlerStreamHandler('app.log', MonologLogger::WARNING)); $log->addWarning('Foo'); echo 'success';
在瀏覽器裏面訪問該文件地址,一般應該是http://127.0.0.1/project/index.php
看到頁面success
以後,而後再查看project文件夾下面是否是多了一個app.log文件。那麼恭喜你成功使用了composer加載包,而且使用該加載的包輸出了log日誌。
編輯剛纔的composer.json文件,添加autoload模塊。
{ "require": { "monolog/monolog": "1.2.*" }, "autoload": { "psr-4": { "Acme": "src/", } } }
其中Acme:"src"
表示,將Acme這麼空間名綁定到/project/src
這個目錄下
而後修改project/src/View.php
文件
#View.php <?php /** * Created by PhpStorm. * User: EasyChris<chris@afox.cc> * Date: 2017/1/22 * Time: 11:06 */ //命名空間爲Acme, namespace Acme; class View { public static function getView() { echo "get view"; } }
繼續返回修改/project/index.php
#index.php <?php /** * Created by PhpStorm. * User: EasyChris<chris@afox.cc> * Date: 2017/1/22 * Time: 10:50 */ require_once 'vendor/autoload.php'; use AcmeView; View::getView();
修改完畢以後返回命令行運行
#使用這個命令會自動生成autoload的文件 vagrant@easychris:/var/www/public/test$ composer dump-autoload Generating autoload files
PS:須要注意一下!
#生成環境下使用 composer dump-atoload -o #這裏的意思是composer dump-autoload --optimize,不是用的話會損失性能。
最後打開http://127.0.0.1/project/index.php
若是顯示get view 那麼,恭喜你配置成功了。
接下來你就能夠繼續在src
目錄下面建立好比Tools.php
而後不須要作其餘require,即可以直接使用了。很是的方便,能夠本身嘗試一下。
查看vender下的autoload.php文件你會看到,他實際上是return了一個ComposerAutoloaderInitaa62b39f628dda129dc5b4ebdfb2b2ae::getLoader();
#autoload.php <?php // autoload.php @generated by Composer require_once __DIR__ . '/composer/autoload_real.php'; return ComposerAutoloaderInitaa62b39f628dda129dc5b4ebdfb2b2ae::getLoader();
而這個getLoader()
方法作了以下幾件事
1.找 ComposerClassLoader 若是不存在就是生成一個實例放在ComposerAutoloaderInitaa62b39f628dda129dc5b4ebdfb2b2ae 中2.將 composer cli 生成的各類 autoload_psr4, autoload_classmap, autoload_namespaces(psr-0) 全都註冊到 ComposerClassLoader 中。3.直接 require 全部在 autoload_files 中的文件