phabel/phabel

编写和部署现代PHP 8代码,就在今天。

资助包维护!
danog

安装次数: 60 275

依赖项: 13

建议者: 0

安全: 0

星星: 242

关注者: 15

分支: 8

开放问题: 8

类型:composer-plugin

1.0.58.81 2022-10-08 14:47 UTC

This package is auto-updated.

Last update: 2024-09-08 19:33:21 UTC


README

编写和部署现代PHP 8代码,就在今天。

这是一个转换器,允许在项目和库中原生使用PHP 8+的功能和语法,同时允许维护者发布针对较低版本的php的版本。

转换器无缝地集成到composer中,在用户机器上安装时将包(以及依赖树当前分支下的所有依赖项)转换为用户特定的PHP版本。

语法/功能支持

Daniil Gentili创建

使用方法

composer require --dev phabel/phabel

现在您可以发布您的Packagist包,并且它将被自动转换为phabel支持的任何PHP版本。

在git标记新版本后,只需运行:

vendor/bin/phabel publish

💡 您的PHP 7用户现在可以安装您的PHP 8库 💡
💡 所有依赖项也将转换为正确的PHP版本。 💡

支持的PHP版本

语法/功能支持

目标

  • ✅ 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 的项目

如果您想将您的项目添加到此列表中,请联系我们