最近在做项目解耦,并将项目通用的文件制作成composer包。需要选择性的对文件进行挪动和再封装。挪动过程中,文件中会有其他文件的依赖,如use xxx(命名空间路径),一层一层文件下来各种嵌套,人工查找和迁移容易出错,故写了一个程序处理。
1.遍历指定文件夹下所有文件,打开文件。
2.读取文件内容,正则匹配到"use XXX;",则解析XXX路径为文件真实路径,由于项目使用命名空间都遵循psr-4规范,故按psr-4规则,替换头部命名空间为对应真实路径即可。
3.检测真实路径下的文件is_readable,不可读,则报错。可读则递归处理该文件。
改进:
1.如果A文件use B,B文件中又use A,这样下来会无限递归下去,故在处理类中增加一个静态变量,存放处理过的文件,从而减少了重复处理的现象,也避免了无限递归到最大深度,程序退出。
2.程序只是报出不存在的文件,还是需要人手动挪,故又加了一个方法,解析源路径和目标路径,exec一个cp命令。