不管你是一个刚学会PHP不久的新手,还是一个有N年PHP经验的老手,一起来加入 Composer 吧,它绝对值得你使用。http://getcomposer.org/

包管理器不算什么新鲜东西,不管是 nodejs 还是 python 等机会所有程序都会有包管理器。当然,PHP也有自己官方的包管理器 ———— Pear ,可是,你懂的,Pear要多难用有多难用,吐槽的不只是一两个人。OK,Composer的出现彻底的改变了这一问题。

Composer 使用简单,真的很简单,如果你从来没安装过 composer,先安装它 :

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

两行命令即可安装上 composer 命令。什么?你用的是window?让我先吐槽下,作为优秀PHP程序员,Mac系统是首先,*nux是次之,window除了游戏多、下电影基本就没什么优势了,没钱买Mac?装个黑苹果吧,我当年也是这么过来的,用了2年黑苹果。

接下来言归正传。
先试用下我做的一个 MyQEE框架 的包吧,在命令行里执行

composer create-project myqee/myqee ./myqee-v3/

等待少许时刻,MyQEE框架就安装到了 myqee-v3 目录了,是否很爽?

此时你是否想问“我自己可以做一个这样的包吗?”,“除了这个还有什么功能?”
OK,答案是肯定的,而且非常简单,我来一个个的讲。

先开始一个小测试自己体验下包的安装和使用
创建一个文件夹,在里面建立一个 composer.json 文件,内容如下:

{
  "name": "test",
  "require": {
    "monolog/monolog": "~1.0.0"
  }
}

这个配置定义了我们需要使用 monolog/monolog 包的 >=1.0.0 且 <1.1 中的最高版本。monolog 是一个记录日志的包,Github地址 https://github.com/Seldaek/monolog/

保存好后,执行

composer install

等待解析,安装完毕,你会看到多了1个vendor目录,composer 默认会把需要 require的类库都安装在这个目录里,然后在这个目录里生成一个 autoload.php 文件,接下来你只要

require 'vendor/autoload.php';

加载这个文件,就可以开始使用你需要的包的代码了,比如:

<?php
require 'vendor/autoload.php';

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));

// add records to the log
$log->addWarning('Foo');
$log->addError('Bar');

保存成 test.php 然后就可以使用到刚刚安装的 Monolog 了。

什么?刚刚装的包版本有点低?我想再加一个包可以吗?当然可以,修改 composer.json 中内容后执行

composer update

大功告成。它会把你在配置移除的包都删掉,也会添加上你新加的包,你需要做的就是 update 一下而已。

比如,我们需要再添加一个 twig(一个PHP模块包) twig/twigphpunit/phpunit (一个程序测试包)
版本真多,找一个自己喜欢的版本或者直接用最高版本,这样写:

{
  "name": "test",
  "require": {
    "monolog/monolog": "~1.0.0",
    "phpunit/phpunit": "3.7.24",
    "twig/twig": "~1.0"
  }
}

执行

composer update

输出

Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing symfony/yaml (v2.3.4)
    Loading from cache

  - Installing phpunit/php-text-template (1.1.4)
    Loading from cache

  - Installing phpunit/phpunit-mock-objects (1.2.3)
    Loading from cache

  - Installing phpunit/php-timer (1.0.5)
    Loading from cache

  - Installing phpunit/php-token-stream (1.2.0)
    Loading from cache

  - Installing phpunit/php-file-iterator (1.3.3)
    Loading from cache

  - Installing phpunit/php-code-coverage (1.2.12)
    Loading from cache

  - Installing phpunit/phpunit (3.7.24)
    Loading from cache

phpunit/php-code-coverage suggests installing ext-xdebug (>=2.0.5)
phpunit/phpunit suggests installing phpunit/php-invoker (>=1.1.0,<1.2.0)
Writing lock file
Generating autoload files

提示你刚刚帮你安装了这些包,你会发现,在 vendor 目录里除了有新加的 phpunit 和 twig 外还有 symfony/yaml 等。是的,因为 phpunit/phpunit 还依赖这个包,所以 composer 会给你自动装好,你就直接用了。

现在,你把 composer.json 中的 phpunit/phpunit 配置删掉,然后再执行 composer update 看看,将输出:

Writing lock file
Generating autoload files
Macintosh:test4 jonwang$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Removing phpunit/phpunit (3.7.24)
  - Removing phpunit/php-code-coverage (1.2.12)
  - Removing phpunit/php-file-iterator (1.3.3)
  - Removing phpunit/php-token-stream (1.2.0)
  - Removing phpunit/php-timer (1.0.5)
  - Removing phpunit/phpunit-mock-objects (1.2.3)
  - Removing phpunit/php-text-template (1.1.4)
  - Removing symfony/yaml (v2.3.4)
Writing lock file
Generating autoload files

它告诉你,这些多余的包已经被移除了,你不用担心这些被移除的包残留在你的代码中。

以上的例子可以让你非常直观的明白怎么使用 composer,说白了,不管你是用的自己的程序还是别的框架,只要载入 vendor/autoload.php 你的程序就进入了 composer 的世界,那么剩下的你需要做的就是寻找到自己喜欢的包,狠狠的 require 他们,尽情的使用。

那么 composer 的包多么?这么好的管理器当然受欢迎了,现在越来越多的优秀开源代码都已经开始加入 composer 了。
你可以在 composer 官方提供的包维护网站里搜搜自己需要的包 https://packagist.org/,也可以自己在里面发布自己的包(后面讲)

开篇就到这,接下来会一步步的教你如何制作自己的包。