lesphp / psr4-converter
一个用于自动将PSR-0和非标准自动加载转换为PSR-4的工具。
Requires
- php: ^8.1
- ext-json: *
- lesphp/property-info-typed-array: ^6.0
- nikic/php-parser: ^4.13
- phpstan/phpdoc-parser: ^1.5
- symfony/console: ^6.0
- symfony/filesystem: ^6.0
- symfony/finder: ^6.0
- symfony/property-info: ^6.0
- symfony/serializer: ^6.0
- symplify/astral: ^10.2
Requires (Dev)
- phpunit/phpunit: ^9.5
README
PSR-4 Converter是一个将PSR-0或非标准代码自动转换为PSR-4规范代码的工具。为了将php代码(支持PHP >= 5.0的代码库)转换为PSR-4,该工具静态解析代码,然后扫描所有代码以找到将更改的定义。使用PSR-4编译遗留代码比仅重命名命名空间需要更多步骤,此工具通过以下方式解决此转换中的问题:
- 确保每个php文件只有一个类;
- 从PSR-0转换为PSR-4,将下划线转换为命名空间;
- 在现有命名空间前加上供应商命名空间;
- 从旧类到新类创建class_alias以确保动态调用(通过变量引用类);
- 验证php文件中无法转换的无效语句;
- 创建包含条件函数和定义的include文件,以便使用composer包含。
- 自动生成autoload文件以加载旧类,同时传递新类。
- 可以忽略命名空间和目录。
- 创建映射json文件,允许使用它来自动化其他步骤。
- 将所有对旧类和函数名称的引用重命名为新类和函数名称。
- 将DocBlocks中对旧类和函数名称的所有引用重命名为新类和函数名称。
- 重构导入以使用新转换的名称。
- 风险转换警告。
- 校验和验证,允许您安全地使用预存的映射文件。
安装
您可以通过几种方式安装此库。
composer
-
将依赖项添加到您的
composer require lesphp/psr4-converter
项目中。建议通过命令composer require --global lesphp/psr4-converter
全局安装。 -
运行PSR-4 Converter,使用命令
php vendor/bin/psr4-converter help
或全局安装后使用psr4-converter help
。
Phive
-
使用命令
phive install --force-accept-unsigned lesphp/psr4-converter
从phive安装PSR-4。 -
通过
psr4-converter help
命令运行PSR-4 Converter。
用法
映射
映射命令将生成一个包含所有转换所需信息的映射json文件,包括所有旧的和新的名称映射。
psr4-converter map "App" /path/to/source -m /tmp/.psr4-converter.json --append-namespace --underscore-conversion --ignore-namespaced-underscore --ignore-path="ignored_relative_path"
例如,上述命令将生成映射文件/tmp/.psr4-converter.json
,其中包含对/path/to/source
目录的所有转换,也将
- 使用
App
供应商命名空间作为新转换名称,因此一个\Old\Name
类将成为\App\Old\Name
; - 使用
--underscore-conversion
选项,一个Old_Name2
类将变为\App\Old\Name2
; - 使用
--append-namespace
选项,供应商命名空间App
将始终添加到新名称中,没有此选项,类\App\Old\Name3
将保持为\App\Old\Name3
,具有此选项时,它将变为\App\App\Old\Name3
; - 使用
--ignore-namespaced-underscore
选项,旧名称中的下划线将保留在已命名的类中,因此一个类\Old\Name_Four
将变为\App\Old\Name_Four
。
使用psr4-converter map --help
命令以获取有关命令参数和可能性的更多详细信息。
转换
通过映射文件,可以使用以下命令将代码转换为新的目录。
psr4-converter convert /tmp/.psr4-converter.json /path/to/destination -m /tmp/.psr4-converter2.json --ignore-vendor-path --create-aliases --allow-risky
它将把在 /tmp/.psr4-converter.json
中映射的代码转换到 /path/to/destination
目录,也将
- 需要由 composer 静态包含的定义创建在
/path/to/destination/includes
下。 - 使用
-m
选项,可以将其他映射文件添加到只用于重命名附加文件中映射的类,因此转换将已经具有附加映射的新名称。 - 使用
--ignore-vendor-path
选项,将忽略供应商路径以生成转换文件的路径,因此具有新名称\App\New\Name
的类将位于/path/to/destination/New/Name.php
,这对于在 composer.json 中进行 psr-4 映射很有用。 - 使用
--create-aliases
选项,将在/path/to/destination/includes/autoload.php
下创建一个文件,该文件可以静态包含到 composer 中来自动加载旧名称,以保持对旧名称动态调用的兼容性。 - 使用
--allow-risky
选项,即使有映射风险,工具也将允许进行转换。
使用 psr4-converter convert --help
命令以获取关于参数和命令可能性的更多详细信息。
重命名
使用映射文件,可以重命名映射引用,因此旧名称将被转换为新名称。使用重命名命令如下 psr4-converter rename /tmp/.psr4-converter.json /path/to/destination
。转换命令已经重命名了转换的代码,因此重命名命令仅用于重命名已存在的其他代码。
使用 psr4-converter rename --help
命令以获取关于参数和命令可能性的更多详细信息。
检查
使用映射文件,可以检查映射更改。使用检查命令如下 psr4-converter inspect /tmp/.psr4-converter.json
。使用 -o names-changes
选项,可以从更改的名称中获取 JSON。
使用 psr4-converter inspect --help
命令以获取关于参数和命令可能性的更多详细信息。