一、PHP的一些臭历史 Dependency Manager For PHP,Composer。在Composer还没诞生之前,PHP的代码很难被管理。虽然pear社区的支持,许多可重用代码可以通过pear来获得,但是pear在处理代码关联性上非常差,当然还有许多问题。Java领域有Maven工具, .Net 的V
Dependency Manager For PHP,Composer。在Composer还没诞生之前,PHP的代码很难被管理。虽然pear社区的支持,许多可重用代码可以通过pear来获得,但是pear在处理代码关联性上非常差,当然还有许多问题。Java领域有Maven工具, .Net 的VS工具集成了NuGet,都是非常好使的关联管理器。但是PHP何去何从?Composer诞生了。它的诞生很大意义上是因为php的3.0版本被普及了,php的命名空间特性让代码包可以在全球级别上具备唯一识别性。当然有人说,我们可以在一个类的命名上做文章也可以做到,但是,会带来许多问题,类名太长,命名重名性高,文件的组织性识别性差等等。PHP根本无法忽略java,.net一直在被使用的package与命名空间的特性,php必须换血。随着php3.0 的普及,通过众多第三方的努力,PHP社区迅猛的积累了许多可用的代码库,起初,大部分代码库都是分享在Github,采用git的方式获取。虽然这个可取,但是关联管理以及操作性上还是比较差。我们需要一个更加简单的具备关联管理的代码库管理工具。Yeah。Composer。
好了,说到这里,或许许多人还很模糊。没关系,我们采用尝试动手,来熟悉Composer。
Composer具体点是什么? 就是一个编译压缩过的phar文件,一个可以执行的工具。
怎么获取?
Linux下
$ curl -sS https://getcomposer.org/installer | php
windows下
C:\Users\username>cd C:\bin C:\bin>php -r "readfile('https://getcomposer.org/installer');" | php
完了,你可以在控制台下,输入命令 php composer.phar 来获取composer的使用帮助。
下面我们来演示一下,如何使用Composer来创建一个PHP项目
{ "name": "kendoctor/composer_demo", "description": "introduction for how to use composer", "minimum-stability": "stable", "authors": [ { "name": "kendoctor", "email": "kendoctor@163.com" } ], "require": { } }
首先,按照目录结构来创建文件
ComposerDemo/ ├── composer.phar ├── composer.json ├── src/ │ ├── models │ ├── Calculator.php ├── index.php
<?php /** * Created by JetBrains PhpStorm. * User: Kendoctor * Date: 14-3-19 * Time: 上午9:39 * To change this template use File | Settings | File Templates. */ class Calculator { public function addNumbers($x,$y) { return $x + $y; } }
我们知道index.php可以这么写
<?php /** * Created by JetBrains PhpStorm. * User: kendoctor * Date: 14-3-19 * Time: 上午9:40 * To change this template use File | Settings | File Templates. */ require("src/models/Calculator.php"); $calc = new Calculator(); echo $calc->addNumbers(10,21);
但是,这不是我们用了Composer想要的。我们要的效果是,实例某个类,它会自动载入。那,怎么搞呢?
修改Composer.json
{ "name": "kendoctor/composer_demo", "description": "description_text", "minimum-stability": "stable", "authors": [ { "name": "author's name", "email": "email@example.com" } ], "autoload":{ "classmap": ["src/"] } }
require这个属性被我删除了,稍等我们再来介绍其特性。首先这里引入一个autoload属性,可以自动加载类或命名空间的特性属性。classmap属性定义要引入的哪个目录下的类,或者直接可以是类文件。我们这里指定src目录下所有的类文件。修改之后,我们要通过composer命令来更新一下目录结构内容,很简单
php composer.php dump-autoload
<?php /** * Created by JetBrains PhpStorm. * User: kendoctor * Date: 14-3-19 * Time: 上午9:40 * To change this template use File | Settings | File Templates. */ require("vendor/autoload.php"); $calc = new Calculator(); echo $calc->addNumbers(10,21);