zoukankan      html  css  js  c++  java
  • composer的自动加载机制

    composer支持四种自动加载的方式:PSR-0 / PSR-4 /Classmap / Files , 其中 PSR-4 是当前推荐的加载方式。

    什么是 PSR ?

    PSR 是 PHP Standards Recommendations(PHP 标准建议)的缩写

    1. Files 是最简单的加载方式,这种方式不管加载的文件是否用到始终都会加载,而不是按需加载

    修改项目根目下的composer.json, 加入 "autoload" 项:

    {
        "require": {
            "monolog/monolog": "1.0.*"
        },
        "autoload": {
            "files": ["controllers/Controller.php"]
        }
    }
    

    需要加载哪个文件,直接写入文件路径即可,路径相对项目的根目录。然后执行composer dump-autoload,该命令可以遍历我们项目根目录以及各依赖库下的 composer.json 文件然后重新生成 vendor/composer/autoload_* 跟自动加载相关的配置文件(运行 composer dump-auto 重新注册自动加载映射关系)。
    composer dump-autoload 之后composer会把配置值写入与 Files加载方式对应的 vendor/composer/autoload_files.php 配置文件中。

    1. Classmap 加载方式也很简单,composer会搜寻我们指定的目录或文件,并把搜寻到的结果写到Classmap对应的 vendor/composer/autoload_classmap.php 配置文件中。 修改composer.json :
    {
        "require": {
            "monolog/monolog": "1.0.*"
        },
        "autoload": {
            "classmap": ["controllers/"]
        }
    }
    

    以上配置会让composer搜寻 controllers 目录下的所有类,并生成配置文件,同样先 composer dump-autoload 下

    1. PSR-0 ,这种加载方式已经过时,所以不推荐在新项目中使用,请用 PSR-4 来代替它。
      修改composer.json 如下, 然后执行composer dump-autoload
    {
        "require": {
            "monolog/monolog": "1.0.*"
        },
        "autoload": {
            "psr-0": {"controllers\": ""}
        }
    }
    

    以上配置的意思是指定 controllers命名空间 所在的父级目录,由于controllers命名空间所在的父级目录就是项目根目录, 所以配置值用 "" ,composer dump-autoload后配置会写入 PSR-0对应的 vendor/composer/autoload_namespaces.php 配置文件中

    1. PSR-4 是 PSR-0 的升级版,是目前推荐的自动加载方式,这种方式使用的是按需加载。

    修改composer.json 如下:

        "require": {
            "monolog/monolog": "1.0.*"
        },
        "autoload": {
            "psr-4": {"controllers\": "controllers/"}
        }
    }
    
    

    注意和PSR-0 的 composer.json 做对比,PSR-4 和 PSR-0 的主要区别是,PSR-4指定的就当作当前命名空间的目录, 而PSR-0 指定的是当前命名空间的父目录。composer dump-autoload 一下, 配置会写入PSR-4对应的 vendor/composer/autoload_psr4.php 文件中

  • 相关阅读:
    LeetCode刷题7——数字的补数
    Leetcode刷题6—不同路径
    Leetcode刷题5—最大子序和
    LeetCode刷题4——子集
    LeetCode刷题3——位1的个数
    LeetCode刷题2——颠倒二进制位
    小鸡啄米问题求解
    weavenet
    为系统守护进程预留计算资源
    PolicyRouting (ip rule)
  • 原文地址:https://www.cnblogs.com/caibaotimes/p/13810329.html
Copyright © 2011-2022 走看看