Home > php教程 > php手册 > 结合Composer 新版本PHP的开发方式

结合Composer 新版本PHP的开发方式

WBOY
Release: 2016-06-06 19:57:39
Original
1140 people have browsed it

一、PHP的一些臭历史 Dependency Manager For PHP,Composer。在Composer还没诞生之前,PHP的代码很难被管理。虽然pear社区的支持,许多可重用代码可以通过pear来获得,但是pear在处理代码关联性上非常差,当然还有许多问题。Java领域有Maven工具, .Net 的V

一、PHP的一些臭历史

     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

     Composer具体点是什么? 就是一个编译压缩过的phar文件,一个可以执行的工具。

     怎么获取? 

Linux下

$ curl -sS https://getcomposer.org/installer | php
Copy after login

windows下

C:\Users\username>cd C:\bin
C:\bin>php -r "readfile('https://getcomposer.org/installer');" | php
Copy after login

完了,你可以在控制台下,输入命令 php composer.phar 来获取composer的使用帮助。

下面我们来演示一下,如何使用Composer来创建一个PHP项目

  1. 首先,创建一个项目目录ComposerDemo
  2. 进入目录之后,使用以上命令来获取composer.phar,当然composer是可以全局配置,意思为不需要一个php项目下载一个Composer,而是共用一个Composer
  3. 接下来 调用 php composer.phar init 可以自动创建一个 composer.json文件,当然你也可以手工创建。

{
    "name": "kendoctor/composer_demo",
    "description": "introduction for how to use composer",
    "minimum-stability": "stable",
    "authors": [
        {
            "name": "kendoctor",
            "email": "kendoctor@163.com"
        }
    ],
    "require": {

    }
}
Copy after login


这个文件很重要,它告诉composer如何工作。初始创建的模版,你可以修正一些你的项目的信息。

  • name ,项目名称,命名规则,vendor名称/项目名称
  • description,项目描述
  • minium-stability,版本类型,具体内容参考官方阐述。这里先不作探讨。
  • authors,作者信息。
  • require, 这里可以请求你项目其他的相关php类库或类库包


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

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

ComposerDemo/
├── composer.phar
├── composer.json
├── src/
│   ├── models
│      ├── Calculator.php
├── index.php
Copy after login

文件Calculator.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;
    }
}
Copy after login

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

我们知道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);
Copy after login

但是,这不是我们用了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/"]
    }

}
Copy after login

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


php composer.php dump-autoload
Copy after login

完了会自动产生目录vendor,里面许多自动产生的内容,不过这里,我们只需要关注autoload.php这个文件。我们在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("vendor/autoload.php");

$calc = new Calculator();
echo $calc->addNumbers(10,21);
Copy after login

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



source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template