使用PSR-4配合composer autoload 自動加載文件夾


 

require 文件很麻煩,使用PSR-4搭配composer一次加載,終生受用。

感覺類似java中的import了,自己先記錄一下最近理解的。

用composer管理自己的包吧

安裝composer

這個不多贅述

英文版教程

中文版教程

PSR-4規范

PSR-4-autoloader

構建項目目錄

|-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 中的文件

致謝參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM