我有一个大型的PHP项目,其中有未知数量的文件名和/或路径示例与类的完整名称空间不匹配。到目前为止,我遇到的所有示例都是由于大小写不匹配(例如API vs API)。有没有简单的方法可以扫描整个项目来识别这些不匹配?一个简单的基于控制台的工具将是理想的,因此它可以作为另一个进程的一部分自动运行。任何建议赞赏。谢谢
cqoc49vn1#
如果加载了项目中的每个文件(include或require),则可以尝试使用get_declared_classes()函数获取声明的类名,然后使用ReflectionClass类检查ReflectionClass::getFileName()并将它们与类名进行比较。需要注意的一点是,跳过ReflectionClass::isInternal()返回true的每个类,因为这些类要么是默认的PHP类,要么来自扩展,因此它们不是来自PHP文件(在这种情况下,该方法将返回false)。
include
require
get_declared_classes()
ReflectionClass
ReflectionClass::getFileName()
ReflectionClass::isInternal()
false
1szpjjfi2#
查找命名空间和路径不匹配的简单命令(从项目根运行;如果需要,用选定的方向替换第一个星号):grep -rP '^\s*namespace' * | sed 's|\\|/|g' | sed 's|/\w*\.php:namespace||' | grep -vP '^([a-zA-Z/_]+) \1;'
grep -rP '^\s*namespace' * | sed 's|\\|/|g' | sed 's|/\w*\.php:namespace||' | grep -vP '^([a-zA-Z/_]+) \1;'
2条答案
按热度按时间cqoc49vn1#
如果加载了项目中的每个文件(
include
或require
),则可以尝试使用get_declared_classes()
函数获取声明的类名,然后使用ReflectionClass
类检查ReflectionClass::getFileName()
并将它们与类名进行比较。需要注意的一点是,跳过
ReflectionClass::isInternal()
返回true的每个类,因为这些类要么是默认的PHP类,要么来自扩展,因此它们不是来自PHP文件(在这种情况下,该方法将返回false
)。1szpjjfi2#
查找命名空间和路径不匹配的简单命令(从项目根运行;如果需要,用选定的方向替换第一个星号):
grep -rP '^\s*namespace' * | sed 's|\\|/|g' | sed 's|/\w*\.php:namespace||' | grep -vP '^([a-zA-Z/_]+) \1;'