《Modern PHP》如何使用composer

作者: JONE 分类: PHPer 发布时间: 2018-09-10 15:59

如何使用composer

组件名称

每个PHP组件的名称都由厂商名和包名组成。
例如,对于流行的 league/flysystem 组件来说,厂商名是league,包名是flysystem。厂商名和包名之间由、符号分隔。厂商名和包名在一起组成完整的组件名league/flysystem。

厂商名是全局唯一的,这是全局标识符,用户识别名下的包属于谁。包名用户唯一识别指定厂商名下的某个包,Composer和packagist都使用vandor/package这种命名约定,避免不同厂商的PHP组件有名称冲突。

安装组件

每个PHP组件都有可能有多个版本(例如,1.0.0、1.5.0或者2.15.0)。Packgist会显示组件的所有可能版本。

建议:语言版本。现代的PHP组件都是用语义版本方案,版本号由三个点(.)分数字组成例如1.13.2。第一个数字是主版本号,如果PHP组件的更新破坏了向后兼容性,会提升主版本号。第二个数字是次版本号,如果PHP组件小幅更新了功能,而没有破坏向后兼容性,会提升次版本号。第三个数字(即最后一个数字)是修订版本号,如果PHP组件修正了向后兼容的缺陷,会提升修订版本号。

composer require vandor/package

记得要把vandor/package 换成组件的厂商名和包名。

composer.lock文件

composer安装项目的依赖后,生成的一个文件。这个文件会列出项目使用的所有PHP组件,以及组件的具体版本号(包括主版本号、次版本号、和修订版本号)。这其实是锁定了项目,让项目只能使用具体版本的PHP组件。
如果有composer。lock文件,composer会下载这个文件中列出的具体版本,而不管Packagist中可用的最新版本是多少。你应该把composer。lock文件内如版本控制,让他们使用php组件版本和你一样。
composer。lock文件有个缺点,composer install命令不会安装比其中列出的版本号新的版本。如果确实需要下载新版组件并更新composer.lock文件,要使用compopser update命令。这个命令会吧组件更新到最稳定版,还会更新composer.lock文件,写入组件的新版本号。

自动加载PHP组件

项目所需的PHP组件已经使用composer安装好了,那么怎么使用组件呢
composer下载PHP组件时还会为项目的所有依赖创建一个符号PSR标准的自动加载器。我们执行在scan.php文件顶部使用require函数导入composer创建的自动加载器:
<php
required ‘vendor/autoad.php’;

composer创建的自动加载器其实就是一个名为autoload.php的胖胖文件,保存在Vendor/目录中。composer下载各个php组件时会检查每个组件的composer.json文件,确定如何加载组件。得到这个消息后,composer会在本地为该组件创造一个符合psr标准的自动加载器。这样我们就可以实例化项目中的任何组件。这些组件会按需自动加载。

编写scan.php

使用Guzzle和CSV组件编写scan.php脚本。
示例如下:
<?php
// 1 使用composer自动加载器
require ‘vendor/autoload.php’;

// 2 实例 Guzzle HTTP 客户端
$client = new \GuzzlenHttp\Client();

// 3 打开迭代处理csv
$csv = new \New\League\Csv\Reader($argv[1]);
foreach ($csv as $csvRow) {
try{
// 4 发送http options请求
$httpReponse = $client->options($csvRow[0]);

// 5 检查http相应状态码
if ($httpResponse->getStatusCode >= 400) {
throw new \Exception();
}
} catch (\Exception $e) {
// 6 把死链发给标准输出
echo $csvRow[0] . PHP_EOL;
}
}

在实例化guzzlenhttp/guzzle 和 league/csv组件时,我们使用了\league\Csv和\GuzzleHttp 命名空间。那我们是怎么知道这些命名空间的呢?因为我读了guzzlenhttp/guzzle 和 league/csv的文档。好的PHP组件都有文档。

文件系统的组织方式

PHP组件的文件系统结构基本上是定型的:

src/ #这个目录包含组件的源码(例如PHp类文件)
tests/ #这个目录包含组件的测试。这个示例用不到这个目录。
composer.json #这是composer配置文件。这个文件用户描述组件,还会告诉compose的自动加载器,把组件中符合psr_4规范的命名空间对应到src/目录中。
README.md #这个markdowm文件提供关于组建的有用信息,包括组件的名称,说明 作者 用法 贡献者指导方针 软件许可证和感谢的人。
CONTRIBUTING.md #这个markdowm文件说明别人如何为这个组件做贡献。
LICENSE #这个纯文本文件包含组件的软件许可证。
CHANGELOG.md #这个markdowm文件列出组件的每个版本中引入的改动。

composer.json文件

php组件中必须有composer.json文件,而且这个文件的聂荣还必须是有效的json。
composer会根据这个文件中的信息查询,安装自动加载PHP组件。
composer.json组件还包含packagist目录中的信息。

name:组件厂商名和包名
description:简要说明组件
keywords:描述组件的关键字,帮助别人在packagist中找到这个组件
homepage:组件网站的url
license:组件采用的软件许可证
authors:这是一个数组,包含每个作者的信息。每个作者的信息至少要包含姓名和网站url
support:这是组件的用户获取技术支持的方式。
require:列出组件自身依赖的组件。
required-dev:与require属性类似,不过列出的是开发组件所需的依赖。
suggest:与require属性类似,不过只是建议安装的组件,以防与其他组件合作时需要,这个对象的值是自由文本字段,composer不会安装这些建议安装的组件。
autoload:告诉composer的自动加载器如果自动加载这个组件。建议使用符合PSR-4规范的自动加载器。

 

====摘抄自Modern PHP 中文版

发表评论

电子邮件地址不会被公开。 必填项已用*标注