• 使用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 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日志。

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

    致谢参考

  • 相关阅读:
    drf—— 序列化组件
    drf—— RESTful API规范
    drf——APIView及其内部函数/类的源码分析
    drf—— drf的安装和使用
    226翻转二叉树
    51,N皇后
    557反转字符串中的单词III
    17.电话号码的字母组合
    459重复的子字符串
    419递增子序列
  • 原文地址:https://www.cnblogs.com/brady-wang/p/10579949.html
Copyright © 2020-2023  润新知