美文网首页黑白之间
Composer 系列:autoload

Composer 系列:autoload

作者: 丶Stephen | 来源:发表于2017-05-12 12:38 被阅读101次

    Composer 系列:为 PHP 配上大货车,从此搬运不再繁琐。

    logo

    简介

    Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。

    对于类库的自动加载,Composer 生成了一个 vendor/autoload.php 文件。引入这个文件,就能得到一个免费的自动加载支持,这种感觉真是棒极了~

    本文主要是介绍如何利用 Composer 自带的自动加载机制,加载本地自定义的包(即不是来自于 packagist)。

    使用

    composer.json 文件中的 autoload 字段中添加自己的 autoloader

    目前 Composer 支持四种自动加载映射的方式:

    • PSR-0 autoloading
    • PSR-4 autoloading
    • classmap generation
    • files

    下面只介绍 PSR-4,为什么?因为它足够方便好用(当你添加类时不需要重新生成 autoloader)。详细请查看 自动加载 - 参考

    PSR-4(推荐)

    {
        "autoload": {
            "psr-4": {
                "First\\": "src/",
                "Temp\\": "lib/"
            }
        }
    }
    

    上面的代码采用 PSR-4 规范,该规范包含了 PHP 最新的自动加载标准,它要求必须使用 namespace (命名空间)的方式。

    First\\ 表示命名空间,必须以 \\ 结尾,避免相似的命名空间导致冲突,若包含子命名空间,可以这样表示:First\\Second\\

    src/ 表示命名空间所在目录为与 Composervendor 目录同级的 src 目录,如下所示:

    First/
    |---examples/
        |---get.php
    |---src/
        |---Curl.php
    |---vendor/
        |---composer/
        |---autoload.php
    |---composer.json
    

    如果需要在多个目录下搜索相同的命名前缀,可以用一个数组提供:

    {
        "autoload": {
            "psr-4": {"First\\": ["src/", "lib/"]}
        }
    }
    

    修改完 composer.jsonautoload 字段后需要更新一下 Composer 的自动加载类:

    composer dumpautoload -o
    

    对应 Curl.php 的命名空间如下表示:

    <?php
    namespace First;
    
    class Curl
    {
        
    }
    

    引用 Curl.php 的方式如下:

    <?php
    require '../vendor/autoload.php';
    
    use First\Curl;
    
    $curl = new Curl();
    ...
    ...
    

    小结

    之前一直以为 namespacePHP 内置好的,只需要在某个类上声明一下某个命名空间,在调用这个类的地方 use 一下就好。。。

    直到前几天脱离框架,单独写了几个类,然后被 xxx class not found 错误折磨到怀疑人生,才明白需要有个 autoloader 才行。

    题外话

    现在 Composer 已经成为 PHP 的依赖管理标杆,多利用这个工具为自己的开发带来方便。

    框架能大大减少开发成本,但有时候不利于个人技术的提升。在使用热门框架时,多看看框架的代码,不仅帮助自己理解掌握框架,也能带来许多编程思想和技术上的提高。与君共勉 :)


    首发于个人博客 StephenCode

    同步在:

    知乎专栏:黑白之间

    简书专题:黑白之间

    SegmentFault 专栏:黑白之间

    微信公众号:黒白之间

    微信公众号

    相关文章

      网友评论

        本文标题:Composer 系列:autoload

        本文链接:https://www.haomeiwen.com/subject/rkmztxtx.html