composer是什么

是php的类包依赖管理工具,用它可以轻松的引用第三方类包,类似于node的npm、ruby的bundler、CentOS中的yum等。

composer解决问题:

1)类库的依赖管理(尤其是N多类库的应用系统)
2)类的自动加载机制(Symfony/Zend/Laravel等均引用了Composer的类加载器)

composer安装:

1
$ curl -sS https://getcomposer.org/installer | php

 会下载一个composer.phar文件到当前目录,你可以在控制台下,输入命令 php composer.phar 来获取composer的使用帮助。

tips:

让composer全局调用:cp composer.phar /usr/local/bin/composer,这样运行composer命令就能使用Composer,而不需输入php composer.phar。

composer一般装在项目的根目录下。

composer使用(创建一个php项目为例):

1.首先,创建一个项目目录composer.demo

2.进入目录之后,使用安装命令来获取composer.phar,当然composer是可以全局配置,意思为不需要一个php项目下载一个Composer,而是共用一个Composer

3.接下来 调用 php composer.phar init( composer init ) 可以自动创建一个 composer.json文件,当然你也可以手工创建。

1
2
3
4
5
6
7
8
9
10
11
12
{
    "name": "root/composer.demo",
    "description": "introduction for how to use composer",
    "minimum-stability": "stable"
    "authors": [
        {
            "name": "leezhxing",
            "email": "leezhxing@163.com"
        }
    ],
    "require": {}
}
这个文件很重要,它告诉composer如何工作。初始创建的模版,你可以修正一些你的项目的信息。
  • name ,项目名称,命名规则,vendor名称/项目名称
  • description,项目描述
  • minium-stability,版本类型,具体内容参考官方阐述。这里先不作探讨。
  • authors,作者信息。
  • require, 这里可以请求你项目其他的相关php类库或类库包

下面我们来演示Composer的第一个特性,类的自动载入

首先,按照目录结构来创建文件

1
2
3
4
5
6
7
composer.demo/
├── composer.phar
├── composer.json
├── src/
│   ├── models
│      ├── Calculator.php
├── index.php

文件Calculator.php

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
/**
 * Created by lee.
 * Date: 14-12-05
 * To change this template use File | Settings | File Templates.
 */
 
class Calculator {
    public function addNumbers($x,$y)
    {
        return $x + $y;
    }
}

我们要使用类Calculator,php老办法就是require这个类文件。事实上,我们在代码中会调用许多类,而这些类都会放到不同的文件中,那样的话,我们需要许多的require。

我们知道index.php可以这么写

1
2
3
4
5
6
<?php
 
require("src/models/Calculator.php");
 
$calc = new Calculator();
echo $calc->addNumbers(10,21);

但是,这不是我们用了Composer想要的。我们要的效果是,实例某个类,它会自动载入。那,怎么搞呢?

修改Composer.json

复制代码
{
    "name": "root/composer.demo",
    "description": "introduction for how to use composer",
    "minimum-stability": "stable",  
    "authors": [
        {
            "name": "leezhxing",
            "email": "leezhxing@163.com"
        }
    ],
    "require": {},

    "autoload":{
        "classmap": ["src/"]
    }
}
复制代码

 

这里引入一个autoload属性,可以自动加载类或命名空间的特性属性。classmap属性定义要引入的哪个目录下的类,或者直接可以是类文件。我们这里指定src目录下所有的类文件。修改之后,我们要通过composer命令来更新一下目录结构内容,很简单

1
composer  dump-autoload

完了会自动产生目录vendor,里面许多自动产生的内容,不过这里,我们只需要关注autoload.php这个文件。我们在index.php只需要引入这个文件就可以了

1
2
3
4
5
6
<?php
 
require("vendor/autoload.php");
 
$calc = new Calculator();
echo $calc->addNumbers(10,21);

如果你又新添加了一个User到models目录下,那你无需要做其他工作,就可以直接在index.php文件中直接调用此类了。