phabel / phabel
编写和部署现代PHP 8代码,就在今天。
Requires
- php: >=8.1 <8.2
- composer-plugin-api: ^2.0
- ext-json: *
- ext-tokenizer: *
Requires (Dev)
- amphp/file: ^2.0
- bamarni/composer-bin-plugin: ^1.4
Provides
- phabelio/phabel: 1.0.58.81
- dev-master
- 1.0.58.81
- 1.0.58.80
- 1.0.58.74
- 1.0.58.73
- 1.0.58.72
- 1.0.58.71
- 1.0.57.81
- 1.0.57.80
- 1.0.57.74
- 1.0.57.73
- 1.0.57.72
- 1.0.57.71
- 1.0.56.81
- 1.0.56.80
- 1.0.56.74
- 1.0.56.73
- 1.0.56.72
- 1.0.56.71
- 1.0.55.81
- 1.0.55.80
- 1.0.55.74
- 1.0.55.73
- 1.0.55.72
- 1.0.54.81
- 1.0.54.80
- 1.0.54.74
- 1.0.54.73
- 1.0.54.72
- 1.0.54.71
- 1.0.53.81
- 1.0.52.80
- 1.0.52.74
- 1.0.52.73
- 1.0.52.72
- 1.0.52.71
- 1.0.51.80
- 1.0.51.74
- 1.0.51.73
- 1.0.51.72
- 1.0.51.71
- 1.0.49.80
- 1.0.49.74
- 1.0.49.73
- 1.0.49.72
- 1.0.49.71
- 1.0.48.80
- 1.0.48.74
- 1.0.48.73
- 1.0.48.72
- 1.0.48.71
- 1.0.47.80
- 1.0.47.74
- 1.0.47.73
- 1.0.47.72
- 1.0.47.71
- 1.0.46.80
- 1.0.46.74
- 1.0.46.73
- 1.0.46.72
- 1.0.46.71
- 1.0.45.80
- 1.0.45.74
- 1.0.45.73
- 1.0.45.72
- 1.0.45.71
- 1.0.44.80
- 1.0.44.74
- 1.0.44.73
- 1.0.44.72
- 1.0.44.71
- 1.0.43.80
- 1.0.43.74
- 1.0.43.73
- 1.0.43.72
- 1.0.43.71
- 1.0.42.80
- 1.0.42.74
- 1.0.42.73
- 1.0.42.72
- 1.0.42.71
- 1.0.41.80
- 1.0.41.74
- 1.0.41.73
- 1.0.41.72
- 1.0.41.71
- 1.0.40.80
- 1.0.40.74
- 1.0.40.73
- 1.0.40.72
- 1.0.40.71
- 1.0.39.80
- 1.0.39.74
- 1.0.39.73
- 1.0.39.72
- 1.0.39.71
- 1.0.38.80
- 1.0.38.74
- 1.0.38.73
- 1.0.38.72
- 1.0.38.71
- 1.0.37.80
- 1.0.37.74
- 1.0.37.73
- 1.0.37.72
- 1.0.37.71
- 1.0.36.80
- 1.0.36.74
- 1.0.36.73
- 1.0.36.72
- 1.0.36.71
- 1.0.35.80
- 1.0.35.74
- 1.0.35.73
- 1.0.35.72
- 1.0.35.71
- 1.0.34.80
- 1.0.33.80
- 1.0.14.74
- 1.0.14.73
- 1.0.14.72
- 1.0.14.71
- 1.0.13.80
- 1.0.13.74
- 1.0.13.73
- 1.0.13.72
- 1.0.13.71
- 1.0.12.80
- 1.0.12.74
- 1.0.12.73
- 1.0.12.72
- 1.0.12.71
- 1.0.11.80
- 1.0.11.74
- 1.0.11.73
- 1.0.11.72
- 1.0.11.71
- 1.0.10.80
- 1.0.10.74
- 1.0.10.73
- 1.0.10.72
- 1.0.10.71
- 1.0.9.80
- 1.0.9.74
- 1.0.9.73
- 1.0.9.72
- 1.0.9.71
- 1.0.8.80
- 1.0.8.74
- 1.0.8.73
- 1.0.8.72
- 1.0.8.71
- 1.0.8
- 1.0.7.80
- 1.0.7.74
- 1.0.7.73
- 1.0.7.72
- 1.0.7.71
- 1.0.7
- 1.0.6.80
- 1.0.6.74
- 1.0.6.73
- 1.0.6.72
- 1.0.6.71
- 1.0.6
- 1.0.5.80
- 1.0.5.74
- 1.0.5.73
- 1.0.5.72
- 1.0.5.71
- 1.0.4.80
- 1.0.4.74
- 1.0.4.73
- 1.0.4.72
- 1.0.4.71
- 1.0.3.80
- 1.0.3.74
- 1.0.3.73
- 1.0.3.72
- 1.0.3.71
- 1.0.2.80
- 1.0.2.74
- 1.0.2.73
- 1.0.2.72
- 1.0.2.71
- 1.0.1.80
- 1.0.1.74
- 1.0.1.73
- 1.0.1.72
- 1.0.1.71
- 1.0.0.80
- 1.0.0.74
- 1.0.0.73
- 1.0.0.72
- 1.0.0.71
- dev-master-71
- dev-master-72
- dev-master-73
- dev-master-74
- dev-master-80
- dev-master-81
- dev-master-70
- dev-master-56
This package is auto-updated.
Last update: 2024-09-08 19:33:21 UTC
README
编写和部署现代PHP 8代码,就在今天。
这是一个转换器,允许在项目和库中原生使用PHP 8+的功能和语法,同时允许维护者发布针对较低版本的php的版本。
转换器无缝地集成到composer中,在用户机器上安装时将包(以及依赖树当前分支下的所有依赖项)转换为用户特定的PHP版本。
语法/功能支持
- ✅ 8.0+
- async/await语法
- 即将推出Psalm兼容的泛型:D
使用方法
composer require --dev phabel/phabel
现在您可以发布您的Packagist包,并且它将被自动转换为phabel支持的任何PHP版本。
在git标记新版本后,只需运行:
vendor/bin/phabel publish
💡 您的PHP 7用户现在可以安装您的PHP 8库 💡
💡 所有依赖项也将转换为正确的PHP版本。 💡
支持的PHP版本
语法/功能支持
- ✅ 8.0+
- async/await语法
目标
- ✅ 7.1+
- 🐘 5.6,7.0处于最终测试阶段。
- 💡 5.4,5.5支持即将推出!
无需额外命令即可添加对旧版本的支持:只需composer update
😄
示例
Async/await语法
Phabel还支持async/await
语法,由Amp提供。
使用原生的async/await
语法和async Amp库并行化您的代码,在纯PHP中实现完全并发的网络、I/O和数据库访问!
文件I/O
此示例使用amphp/file库
<?php // Write and read three files on your filesystem, in parallel // Async/await syntax powered by phabel.io // Concurrency powered by amphp.org require 'vendor/autoload.php'; use Amp\Loop; use function Amp\File\read; use function Amp\File\write; Loop::run(function () { // This is done in parallel! await [ write('file1', 'contents1'), write('file2', 'contents2'), write('file3', 'contents3'), ]; // This is also done in parallel! var_dump(await [ read('file1'), read('file2'), read('file3'), ]); });
您可以将此代码发布为Composer包,并在安装时自动转换,或者甚至手动转换
composer require amphp/file phabel/phabel vendor/bin/phabel run input.php output.php php output.php
CLI API
当您运行
composer require --dev phabel/phabel
Phabel自动编辑composer.json,添加一些配置参数,并将最低支持的PHP版本提高到8.0
。
然后,以下命令可用
发布
发布您的包及其依赖项的转换版本。
💡 您的PHP 7用户现在可以安装您的PHP 8库 💡
💡 所有依赖项也将转换为正确的PHP版本。 💡
内部,此命令使用最新的(或提供的)git标签,然后创建+推送两个子标签
tag.9999
- 指向与tag
完全相同的提交。tag.9998
- 基于基于tag
的新提交,对composer.json
进行一些更改。
以下是一个composer.json
的例子
{ "name": "phabel/package", "description": "An example package.", "type": "project", "require": { "php": ">=8.0", "vendor/new-php8-package": "^1", "vendor/old-php7-package": "^1" }, "require-dev": { "phabel/phabel": "^1" } }
请注意,new-php8-package
仅支持PHP 8.0+,而old-php7-package
支持PHP 7.0+。
当用户在PHP 8.0上需要phabel/package:^tag
时,以下情况发生
- PHP 8.0:安装未处理的提交@
tag.9999
。 - PHP 7(或更低版本):加载
tag.9998
,触发Phabel的composer插件,它- 将
phabel/package
转换为PHP 7。 - 递归地将
vendor/new-php8-package
及其所有依赖项转换为PHP 7。 - Composer仍然负责依赖和需求解析,因此仅在没有其他选择时才会进行转换。
vendor
文件夹中的所有依赖项都会检查协变和逆协变冲突,这些冲突将立即解决。
- 将
请注意,随着 phabel 支持越来越低的 PHP 版本,您的包也将自动支持这些版本,无需重新发布!
使用方法
vendor/bin/phabel publish [options] [--] [<source>]
参数
source
- 可选 源标签名称,默认为最新标签。
选项
-r, --remote[=REMOTE]
- 推送标签的远程位置,默认为当前分支的上游。-d, --dry|--no-dry
- 是否跳过将标签推送到任何远程位置。
运行
该命令只是将指定的文件或目录转换为指定的 PHP 版本。
此命令对于在 phabel 中进行实验或创建转换后的 phar 文件非常有用。
始终确保在创建 phar 时也转换 vendor
目录,以自动解决 协变和逆协变 冲突。
publish
是此命令的简化版本,它会在 Composer 安装时自动转换包(及其所有依赖项)。
使用方法
vendor/bin/phabel run [options] [--] <input> <output>
参数
input
- 输入路径output
- 输出路径
选项
--target[=TARGET]
- 目标 PHP 版本,默认为 Phabel 支持的最低 PHP 版本-i, --install|--no-install
- 是否自动安装所需的依赖项-j, --parallel[=PARALLEL]
- 实验性: 用于转换的线程数,默认为 1
使用 phabel 的项目
如果您想将您的项目添加到此列表中,请联系我们!