PHP集成Razorpay时出现命名空间与应用自动加载器冲突问题
问题根源
你注册的全局自动加载器未做文件存在校验,也没有过滤不属于项目自有类的命名空间,在Razorpay自带的自动加载器生效前就尝试从classes目录加载Razorpay的命名空间类,直接触发了文件不存在的警告。
解决方案
1. 优化自定义自动加载逻辑
修改MyApp.php中的loadClasses方法,增加文件存在校验,同时兼容不同系统的目录分隔符:
public function loadClasses() { spl_autoload_register(function ($className) { // 替换命名空间反斜杠为系统兼容的目录分隔符 $className = str_replace('\\', DIRECTORY_SEPARATOR, $className); $classPath = __DIR__ . DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR . $className . '.class.php'; // 仅当自有类文件存在时加载,不存在则交给其他自动加载器处理 if (file_exists($classPath)) { include_once $classPath; } }); }
2. 确认Razorpay引入逻辑
你当前loadRazorPay方法中引入razorpay/Razorpay.php的逻辑是正确的,官方Razorpay PHP包的该文件会自动注册自身的命名空间自动加载器,无需额外调整。
3. 可选优化
你在MyApp.php顶部声明的use Razorpay\Api\Api;并未使用(实例化时写了全类名),可以直接删除避免混淆。
修改完成后重新运行即可解决该警告。
内容的提问来源于stack exchange,提问作者Jagadeesh Ch
相关产品推荐
相关产品推荐

