标签:http io os 使用 java ar for 文件 sp
注意到composer是在最近学习一些github里面的项目时,发现很多都有composer.json,原来这货是为了composer包依赖管理工作而活的。其实它在前几年就出现了,只是那个时候PHP版本5.3以后的版本都慢慢兴起来,也就是命名空间才被引用。那,这货到底能干嘛呢?简单来说就是为你引入一个别人写好的功能包,并且为你做好自动加载,你只需要用php标准命名空间来初始化实例就行。可以看下中文的翻译介绍。
要理解好composer需要了解其它一些辅助工具,逐一来介绍下。预装好php环境,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 # 验证
composer.json声明了包依赖以及声明元素标签,关键的就是require
{
"require": {
"php": ">=5.3",
"huamanshu/xorm": "dev-master"
}
}
如你所见,require的对象将会映射包的名称(huamanshu/xorm)和包的版本是dev-master。那,composer会拿huamanshu/xorm去哪得到相应的包呢?
依赖包名huamanshu/xorm
会到https://packagist.org去获取包。如果你是包的开发者,那你需要先注册一个账号,github亦如此,再提交你的包名到列表里去。
而packagist不是实际源码存储的地方,它只是自动同步github的项目https://github.com/meolu/xorm.git
开发者创建自己的项目,然后在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个,简称PSR。
现在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
在开始新建的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各种语言的接口。
<?php
require __DIR__ . ‘/vendor/autoload.php‘;
$go = new xorm\Go();
$go->where(); # class Go‘s function where
除了packagist包,composer 也有平台的包,这些包是并不是由 comoposer 安装,它们是安装在操作系统上的东西,composer 将它们作为虚拟的包,以方便管理。它们包括:PHP 本身,PHP 的扩展,还有一些系统中的库。composer show --platform
即可看到。
composer提供这样一个包依赖管理方式对于PHP这样一个社区兴盛的语言,会类似python、java一样,有大量开发者提供了功能包,需要一个方便的机制来调用,版本更新切换、层级嵌套神马的。文件拷贝、代码复制粘贴的时代早已落伍,或许composer很快能一统江湖。无论是想做统计、日志、ORM等等,composer仓库里找找,几分钟后,轮子都已经装备完毕,就等点火启动,爽不?
标签:http io os 使用 java ar for 文件 sp
原文地址:http://www.cnblogs.com/wushuiyong/p/3971048.html