require 文件很麻煩,使用PSR-4搭配composer一次加載,終生受用。
感覺類似java中的import了,自己先記錄一下最近理解的。
用composer管理自己的包吧
安裝composer
這個不多贅述
PSR-4規范
構建項目目錄
|-project
|-src
|-View.php
|-app
|-Tools.php
|-composer.json
上面路徑的View.php在project/src/View.php 中,其他同理,View 和 Tools 只是為了做演示用的。
構建composer.json
打開創建的composer.json文件輸入,這里拿monolog做例子。
{
"require": {
"monolog/monolog": "1.2.*"
}
}
用composer加載包
在目錄所在的命令行中輸入
#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
測試加載的monolog包
在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 Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->addWarning('Foo');
echo 'success';
在瀏覽器里面訪問該文件地址,通常應該是http://127.0.0.1/project/index.php
看到頁面success之后,然后再查看project文件夾下面是不是多了一個app.log文件。那么恭喜你成功使用了composer加載包,並且使用該加載的包輸出了log日志。
使用PSR-4加載文件
1.編輯composer.json 配置加載目錄和空間名
編輯剛才的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 Acme\View;
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.找 Composer\ClassLoader 如果不存在就是生成一個實例放在ComposerAutoloaderInitaa62b39f628dda129dc5b4ebdfb2b2ae 中
2.將 composer cli 生成的各種 autoload_psr4, autoload_classmap, autoload_namespaces(psr-0) 全都注冊到 Composer\ClassLoader 中。
3.直接 require 所有在 autoload_files 中的文件
