gpt4 book ai didi

php - 验证 PSR-4 文件/类结构(无痛迁移到 PSR-4)

转载 作者:行者123 更新时间:2023-12-05 03:10:25 28 4
gpt4 key购买 nike

我有一个在内部项目中使用的 composer 包。历史上,此包中的所有类都是通过 "autoload": { "classmap": ... } 自动加载的,并且尚未结构化。

现在我想迁移到 PSR-4。我根据类命名空间重新排序了所有文件和目录。命名空间或类名没有改变,只有文件位置/名称改变了。

如何验证我的新文件/类结构以确保它符合 PSR-4 并且所有类都可以通过 "autoload": { "psr-4": ... } 加载?我进行了谷歌搜索,但没有找到任何工具。

最佳答案

我能够使用 Jakub Zalas 的回答(选项 2)中的提示解决我的问题。

想法是:

  1. 将 composer 的工作 autoload_classmap.php 复制到 autoload_classmap-orig.php
  2. 根据需要重新安排类/更改 composer.json
  3. 针对 orig classmap 测试新的自动加载。

为避免包含一个类的源文件时自动定义另一个类的情况(即在一个文件中定义了多个类),每个类都应在干净的 php 环境中加载(单独的 php-cli 运行)。

为此我使用了 2 个脚本:

类自动加载检查器(check.php):

<?php

// test if a class, mentioned in autoload_classmap-orig.php at line $num,
// can be autoloaded. Exit status: 0 - ok, 4 - failed to autoload,
// 3 - no more classes in autoload_classmap-orig.php

error_reporting(0);
require_once(__DIR__ . "/vendor/autoload.php");

$num = $argv[1];

$classes = array_keys(include('autoload_classmap-orig.php'));

if (!isset($classes[$num])) {
exit(3);
}

$current_class = $classes[$num];
echo $current_class;
if (!class_exists($current_class)) {
exit(4);
}

exit(0);

迭代器(check.sh)

#!/usr/bin/env bash

# call ./check.php until all classes are checked or max number
# of checks reached.

max=500
num=0

while true ; do
php ./check.php $num
status=$?
case $status in
0) echo " - OK" ;;
3) echo "\nFinished." ; break ;;
4) echo " - CAN NOT BE AUTOLOADED" ;;
*) echo " - UNKNOWN ERROR $status" ;;
esac

num=$(($num + 1))
if [ "$num" -gt "$max" ] ; then
echo "\nMax number of classes reached."
break
fi
done

关于php - 验证 PSR-4 文件/类结构(无痛迁移到 PSR-4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40150655/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com