
代码重用带来了依赖性管理问题,而依赖性管理历来是一个相当人工且容易出错的过程。幸运的是,近年来大多数编程语言都通过引入各种依赖性管理工具来解决这一问题。在 生态系统中, 因其易用性、灵活性和广泛采用而成为标准工具。
尽管 Composer 是为依赖关系管理而设计的,但您也可以用它来完成以下任务:
本教程将逐步指导您创建自己的 Composer 软件包,并将其发布到 ,这是一个供全球开发人员在自己的项目中使用的 PHP 软件包存储库。
首先,让我们了解一下 Composer。简单来说,Composer 的工作原理是使用一个 composer.json 文件,其中包含 PHP 项目中依赖项的定义。它从一个集中的软件仓库中查找这些软件包,然后使用软件包仓库自动下载并安装这些依赖项。
假设你已经在 PHP 工作环境中,下面是它的依赖关系下载和安装过程:
install 等命令解决依赖关系,安装所需的依赖关系;update 更新现有的依赖关系;require 在 composer.json 文件中添加新的依赖关系。执行命令时,Composer 会读取 composer.json 文件以确定所需的依赖项,检查软件包仓库中适合 PHP 环境的每个依赖项的最新版本,然后检查是否存在冲突或版本限制。简而言之,Composer 简化了 中的依赖关系管理,使安装、更新和使用外部库和框架变得更加容易。
本教程将向您展示如何创建一个名为 tempconv 的简单 PHP 库,用于将摄氏温度转换为华氏温度,反之亦然。
在开始之前,您需要准备好以下几样东西:
为本教程创建自己的 GitHub 仓库,在此推送完成的库代码和文件。

在 GitHub 上创建项目库。
本教程使用的项目名称为 tempconv。 在 “描述 “字段中,提供有关应用程序的简要细节。选中添加 README 文件的复选框,为 Add .gitignore 选项选择 Composer 模板,并选择许可证 – 本教程使用 MIT License。最后,点击 Create repository。
将刚刚创建的版本库克隆到本地计算机上。别忘了用你自己的 URL 替换这里和本教程中的 URL:
$ git clone https://github.com/rexfordnyrk/tempconv.git
这会在当前工作目录下创建一个名为 tempconv 的目录。此时,该目录只包含 README.md、LICENSE 和 .gitignore 文件,但您还将在此创建软件包文件。
在项目目录中,添加一个名为 TemperatureConverter.php 的文件,其中包含以下代码:
<?php
namespace Rexfordnyrk\Tempconv;
class TemperatureConverter
{
//Caller must provide the temperature value and the unit either C Celsius or F Fahrenheit
public function convert($temperature, $unit)
{
//Checking whether the unit we're working with is Celsius or Fahrenheit
if ($unit === 'C') {
$fahrenheit = ($temperature * 9 / 5) + 32;
return $fahrenheit;
} elseif ($unit === 'F') {
$celsius = ($temperature - 32) * 5 / 9;
return $celsius;
} else {
//Throwing error if the unit provided is neither C nor F
throw new \InvalidArgumentException('Invalid unit, only C (Celsius) or F (Fahrenheit) are allowed');
}
}
}
该类有一个名为 convert 的 *** ,它将温度和单位作为参数,并返回转换后的温度。如果单位无效,则会抛出异常。
现在就到此为止。在现实世界中,你可能会编写单元测试,以确保代码在修改或更新后能按预期运行。
有了库代码,就该把它 *** 成一个 Composer 包了。你将使用向导一步步为你的软件包生成 composer.json 文件,我们还将介绍在将代码推送到版本库之前将其组织成软件包的一些更佳实践。
虽然你可以在项目目录根目录下手动写入 composer.json 文件的内容,但更好还是使用下面的 Composer 命令来生成它:
$ composer init
这条命令会让你一步步完成一个小向导。你对软件包名称、描述、作者信息和许可证类型等提示的回答将生成软件包的 composer.json 文件。
概述了预期值,以及你可以用来定义项目的 composer.json 的其他选项。

使用 composer init 生成配置。
请注意,向导会在适当的地方为问题提供预定义的答案,例如从 git 导出你的姓名和电子邮件。如果你喜欢,可以随意更改。
该库的功能不依赖于任何其他软件包,因此可以对指定依赖关系的问题回答 “No“。
向导会显示生成文件内容的预览,并要求您确认以完成向导。
完成向导后,除了 composer.json 文件外,还会创建两个目录:
将 TemperatureConverter.php 文件移到 src 目录。如果你的库有依赖库,运行 composer install 生成自动加载器并安装依赖包。
将你的修改和新文件添加到 Git:
$ git add -A
提交对本地版本库所做的更改,并将其推送到 GitHub 上的远程版本库,以便在下一节中轻松发布项目:
$ git commit -am "Initial Release" && git push
有了您的代码,您就可以在您的 repo 中创建一个带有版本号的库发布版本,这样其他开发者就可以跟踪您的稳定版和重要更新。
导航到 GitHub 上的版本库,点击 “About” 部分下方的 “Releases“。在 “Releases” 页面,你现在应该什么都没有,点击 “Create a new release“。

GitHub 的发布页面。
填写有关发布的一些细节,如标签版本和发布标题。标签版本应是该发布的唯一标识符(例如:v1.0.0),发布标题应描述发布中包含的更改(例如:Initial release)。
您还可以选择添加版本说明。如果要上传文件,如编译后的二进制文件或源代码存档,可将文件拖放到 Attach binaries by dropping them here or selecting them 区域,但本教程不需要这样做。

在 GitHub 上输入初始版本的详细信息。
点击 “Publish release” 创建发布版本。
现在你的项目应该可以在版本库的 “Releases” 页面上找到。用户可以下载任何附加文件并查看发布说明。此外,如果你为发布添加了标签,其他开发者就可以使用该标签查看发布中包含的确切代码。
您的程序库已经准备好与全世界分享。让我们在 Packagist 上以软件包的形式发布它。
Packagist 是 PHP 的主要软件包仓库。它为开发人员提供了一个发布和共享 PHP 软件包的中心位置,其他开发人员也可以在自己的项目中发现和使用这些软件包。让我们发布您的软件包!
导航到 ,点击 Login,然后选择 GitHub 作为登录 *** ,使用您的 GitHub 账户进行身份验证。

使用 GitHub 在 Packagist 上注册。
单击 Authorize,允许 Packagist 访问您的帐户。

使用 GitHub 成功登录 Packagist。
要在 Packagist 上发布软件包,请提交包含描述软件包及其依赖关系的 composer.json 文件的 GitHub 仓库。单击 Packagist 网站上的 Submit,在出现的页面上提供您的 repo 的 URL,然后单击 Check 进行验证。
如果版本库有效,Packagist 就会检测到软件包的名称,”Check” 按钮就会变成 “Submit“。

Composer 软件包 rexfordnyrk/tempconv 已验证并准备提交。
单击 “Submit“,Packagist 会花一点时间设置并发布您的项目。

编译器软件包成功发布。
就是这样!您的软件包现在可以在 Packagist 上发布,供其他开发人员在自己的项目中作为依赖项使用。
您可以在其他项目中使用您发布的软件包, *** 是在 composer.json 文件中将其添加为依赖关系。您可以手动创建并编辑该文件,但更好使用 Composer 命令,如下所示:
$ composer require rexfordnyrk/tempconv
如果没有,Composer 会自动创建 composer.json 文件,然后从 Packagist 查找、下载并自动加载软件包。输出结果应该是这样的:

创建一个包含演示程序代码的 demo.php 文件,以便与程序库配合使用。然后,您可以在程序代码中使用 TemperatureConverter 类,如下所示:
<?php use Rexfordnyrk\Tempconv\TemperatureConverter; require_once './vendor/autoload.php'; $converter = new TemperatureConverter(); $fahrenheit = $converter->convert(20, 'C'); echo "20°C is equivalent to $fahrenheit °F\n"; $celsius = $converter->convert(68, 'F'); echo "68°F is equivalent to $celsius °C\n";
这段代码使用 TemperatureConverter 类转换 20 摄氏度和 68 华氏度的温度,并输出结果。Composer 创建了导入的 autoloader.php 文件,用于加载所需的所有依赖项。它会在必要时自动加载类。
最后,在终端运行这段代码:
$ php demo.php
输出结果应该与此类似:
$ php demo.php 20°C is equivalent to 68 °F 68°F is equivalent to 20 °C
您刚刚在一个面向对象的类中创建了一个简单的 PHP 库,用于将摄氏温度转换为华氏温度,反之亦然,该库可以在其他应用程序中重复使用。您看到了如何使用 Composer Init 命令从类中创建包,还学到了一些库的基本代码组织更佳实践。您在 Packagist 上发布了库,这样您和其他开发人员就可以将其作为其他项目的依赖项。
不久前,PHP 8.0大张旗鼓地发布了。它带来了许多新特性、性能增强和变化——其中最令人兴奋的是新的JIT编译器。 技术世界总是在向前发展,PHP也是如此。 ,包含了几个令人兴奋的特性。它定于今年晚些时候于2021年11月25日发布。 在本文中,我们将详细介绍PHP 8.1将带来哪些新的东...
宝塔面板中的网站管理是非常重要的一部分,也是站长经常需要使用到的功能模块。网站管理,主要用于管理和创建WEB站点。如果您是宝塔面板的使用用户,应该对此模块有充分的了解,以便于您更高效地管理网站。 宝塔面板网站管理模块包括:添加新网站、修改默认页、设置默认站点、站点列表、站点的运行与停止、备份站点、...
使用宝塔面板,您可以快速地创建一个FTP管理账户,对网站文件进行管理。但有必要提醒大家的是,使用FTP远不如使用SFTP安全,你可以查看文章“”进一步了解两者之间的差异。 此外,宝塔面板的文件管理模块其实已经能够满足站长的大部分文件管理需求。当然,如果你非得要使用FTP管理服务器文件,可以参照以下...
Laravel多年来一直是PHP应用程序开发的摇滚明星,这是有充分理由的。庞大的生态系统、活跃的社区、强大的就业市场、成功的初创公司——它拥有一切让采用新技术变得值得的东西。 如果你想学习Laravel,你不需要更进一步。通过浏览本指南,您可以找到最适合您的Laravel教程,与您的知识水平和...
您是否正在寻找成功的方法来加快Laravel的性能,同时在您的项目上工作?你来对地方了! Laravel是一个流行的开源PHP框架,以其强大的安全性和简单而复杂的编码架构而闻名。它是构建能够推动收入和推动业务发展的尖端Web应用程序的绝佳选择。 尽管如此,如果你不使用正确的优化技术,Lara...
随着越来越需要以更快的周转时间生产可扩展、安全和灵活的应用程序,Microservices和APIs在软件开发领域无处不在。 客户需求瞬息万变,他们希望软件解决方案能够减轻他们的任务并为他们提供便利。 采用单体架构的传统方法限制了开发人员进行大量创新。由于它们的成分很硬,因此在应用程序中进行...