码迷,mamicode.com
首页 > 其他好文 > 详细

composer会成为主流么?

时间:2014-09-14 16:39:17      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:http   io   os   使用   java   ar   for   文件   sp   

注意到composer是在最近学习一些github里面的项目时,发现很多都有composer.json,原来这货是为了composer包依赖管理工作而活的。其实它在前几年就出现了,只是那个时候PHP版本5.3以后的版本都慢慢兴起来,也就是命名空间才被引用。那,这货到底能干嘛呢?简单来说就是为你引入一个别人写好的功能包,并且为你做好自动加载,你只需要用php标准命名空间来初始化实例就行。可以看下中文的翻译介绍

要理解好composer需要了解其它一些辅助工具,逐一来介绍下。预装好php环境,composer工具,这些得必须弄好的吧?

1. composer 安装

curl -sS http://getcomposer.org/installer| php -- --install-dir=/usr/local/php/bin
 cp /usr/local/php/bin/composer.phar /usr/bin/
 composer about # 验证

2. composer.json

composer.json声明了包依赖以及声明元素标签,关键的就是require

{
     "require": {
         "php": ">=5.3",
         "huamanshu/xorm": "dev-master"
     }
 }

如你所见,require的对象将会映射包的名称(huamanshu/xorm)和包的版本是dev-master。那,composer会拿huamanshu/xorm去哪得到相应的包呢?

3. packagist

依赖包名huamanshu/xorm会到https://packagist.org去获取包。如果你是包的开发者,那你需要先注册一个账号,github亦如此,再提交你的包名到列表里去。

而packagist不是实际源码存储的地方,它只是自动同步github的项目https://github.com/meolu/xorm.git

4. github

开发者创建自己的项目,然后在setting里面配置hooks,填写packagist提供的name、token就可以在提交的时候,自动同步到packagist。

其中项目中composer.json跟上面用来引入包的composer.json不太一样,主要在autoload,我范例使用的是PSR-4。

{
     "name": "huamanshu/xorm",
     "type": "library",
     "require": {
         "php": ">=5.3.0"
     },
     "autoload": {
         "psr-4": {
             "xorm\\":"src/xorm"
         }
     }
 }

5. PHP规范标准

最新的规范是有5个,简称PSR

  • PSR-0 自动加载
  • PSR-1 基本代码规范
  • PSR-2 代码样式
  • PSR-3 日志接口
  • PSR-4 自动加载增强版

现在composer里一般在使用PSR-0、PSR-4,后者是在13年底发布的,但相对前者简洁了很多,看个例子。

Composer使用PSR-0风格

vendor/
     vendor_name/
         package_name/
             src/
                 Vendor_Name/
                     Package_Name/
                         ClassName.php       # Vendor_Name\Package_Name\ClassName
             tests/
                 Vendor_Name/
                     Package_Name/
                         ClassNameTest.php   # Vendor_Name\Package_Name\ClassName

Composer使用PSR-4风格

vendor/
     vendor_name/
         package_name/
             src/
                 ClassName.php       # Vendor_Name\Package_Name\ClassName
             tests/
                 ClassNameTest.php   # Vendor_Name\Package_Name\ClassNameTest

6. 引入包

在开始新建的composer.json初始化下composer install就会生成以下目录。

├── composer.json  
 ├── composer.lock  
 ├── test.php 
 └── vendor  
     ├── autoload.php  
     ├── composer  
     │   ├── autoload_classmap.php  
     │   ├── autoload_namespaces.php  
     │   ├── autoload_psr4.php  
     │   ├── autoload_real.php  
     │   ├── ClassLoader.php  
     │   └── installed.json  
     └── huamanshu  
         └── xorm  
             ├── composer.json  
             ├── README.md  
             └── src  
                 └── xorm  
                     └── Go.php  

github项目xorm会加载到vendor下,并且生成自动加载文件autoload.php。这过程有点类似thrift,根据一个.thrift文件gen各种语言的接口。

7. 使用包

<?php
 require __DIR__ . ‘/vendor/autoload.php‘;
 $go = new xorm\Go();
 $go->where(); # class Go‘s function where

8. 工程意义

除了packagist包,composer 也有平台的包,这些包是并不是由 comoposer 安装,它们是安装在操作系统上的东西,composer 将它们作为虚拟的包,以方便管理。它们包括:PHP 本身,PHP 的扩展,还有一些系统中的库。composer show --platform即可看到。

composer提供这样一个包依赖管理方式对于PHP这样一个社区兴盛的语言,会类似python、java一样,有大量开发者提供了功能包,需要一个方便的机制来调用,版本更新切换、层级嵌套神马的。文件拷贝、代码复制粘贴的时代早已落伍,或许composer很快能一统江湖。无论是想做统计、日志、ORM等等,composer仓库里找找,几分钟后,轮子都已经装备完毕,就等点火启动,爽不?

composer会成为主流么?

标签:http   io   os   使用   java   ar   for   文件   sp   

原文地址:http://www.cnblogs.com/wushuiyong/p/3971048.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!