美文网首页
PHP 新手入门指南 - Composer

PHP 新手入门指南 - Composer

作者: chansey | 来源:发表于2017-06-27 12:03 被阅读184次

    我们在 PHP 项目中通常会引入很多类文件,而程序运行的时候则依赖它们,如果依赖内容很多管理起来就会很麻烦,有没有一个好的办法解决这个问题,答案是肯定的,它就是 Composer

    Composer

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

    Composer 不是一个包管理器。是的,它涉及 "packages" 和 "libraries",但它在每个项目的基础上进行管理,在你项目的某个目录中(例如 vendor
    )进行安装。默认情况下它不会在全局安装任何东西。因此,这仅仅是一个依赖管理。

    这种想法并不新鲜,Composer 受到了 node's npm 和 ruby's bundler 的强烈启发。而当时 PHP 下并没有类似的工具。

    Composer 官网
    Composer 中文文档

    安装
    • for Linux / Unix / OSX
    curl -sS https://getcomposer.org/installer | sudo php
    

    或者直接下载 phar 最新的文件

    如果你需要全局使用它,你可以将它加入到环境变量 PATH 中:

    mv composer.phar /usr/local/bin/composer
    
    • for Windows

    下载安装即可

    小实践

    这里我们结合系列文章中内容,对之前项目中引入的类文件内容进行调整,通过 Composer 来实现自动加载。

    首先,来看看之前项目中的文件 core/bootstrap.php ,内容如下:

    <?php
    
    $app = [];
    
    $app['config'] = require 'config.php';
    
    require 'core/Request.php';
    require 'core/Router.php';
    require 'core/database/Connection.php';
    require 'core/database/QueryBuilder.php';
    
    $app['database'] = new QueryBuilder(
        Connection::make($app['config']['database'])
    );
    

    可以看到,这里 require 了很多依赖文件。

    好,让我们开始进行调整。

    首先,需要在项目个根目录创建 composer.json 文件。

    Composer 文档详尽,在此之前建议多读以了解如何使快速用它。

    {
        "autoload": {
            "classmap": [
                "./"
            ]
        }
    }
    

    这里使用通过 classmap (类映射)的形式,以当前目录为基础,Composer 会检索目录下其它的类,并自动引入它们。

    接下来,还需要前执行命令生成自动加载的相关文件:

    composer install
    

    将会项目下生成一个 vendor 目录:

    vendor

    打开 autoload_classmap.php 你会发现你想引入的文件已经加入进来:

    <?php
    
    // autoload_classmap.php @generated by Composer
    
    $vendorDir = dirname(dirname(__FILE__));
    $baseDir = dirname($vendorDir);
    
    return array(
        'Connection' => $baseDir . '/core/database/Connection.php',
        'Post' => $baseDir . '/test.php',
        'QueryBuilder' => $baseDir . '/core/database/QueryBuilder.php',
        'Request' => $baseDir . '/core/Request.php',
        'Router' => $baseDir . '/core/Router.php',
    );
    

    如果你项目有增加新的类和依赖内容要加载,你需要重新生成一次自动加载文件,通过 composer dump-autoload 命令来实现。

    接下来我们需要在项目中引入自动加载文件。

    在项目的起始文件 index.php,内容如下:

    <?php
    
    // 这里引入了自动加载文件
    require 'vendor/autoload.php';
    require 'core/bootstrap.php';
    
    require Router::load('routes.php')
                ->direct(Request::uri(), Request::method());
    

    接下来,你可以注释或者去掉之前 core/bootstrap.php 中的引入:

    <?php
    
    $app = [];
    
    $app['config'] = require 'config.php';
    
    // require 'core/Request.php';
    // require 'core/Router.php';
    // require 'core/database/Connection.php';
    // require 'core/database/QueryBuilder.php';
    
    $app['database'] = new QueryBuilder(
        Connection::make($app['config']['database'])
    );
    

    如果再次运行项目代码,结果照旧,如你所愿。

    至此我们就通过 Composer 自动加载实现了依赖管理。

    相关文章

      网友评论

          本文标题:PHP 新手入门指南 - Composer

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