You need to enable JavaScript to run this app. PHP跨文件引用命名空间自定义类报Class Not Found Error 如何解决
优惠活动
大模型
产品
解决方案
定价
更多

PHP跨文件引用命名空间自定义类报Class Not Found Error 如何解决

触发类未找到错误的核心原因
  • 你仅配置了Composer第三方依赖的加载逻辑,完全没有将自己编写的RouterOS命名空间类文件纳入自动加载映射范围,自动加载器自然无法识别自定义类的位置
  • 代码中引用的RouterOS\Config、RouterOS\Client、RouterOS\Query属于第三方RouterOS API库的内置类,当前composer.json的依赖列表并未引入这个库,后续就算解决了自定义类的加载问题,还是会触发第三方类的未找到错误

具体修复步骤
  1. 调整项目目录结构,匹配PSR-4自动加载规范
    • 在项目根目录(和test.php、vendor文件夹、composer.json同级的目录)下,新建src/RouterOS两级目录
    • 将你编写的RouterOSClient.php移动到src/RouterOS/RouterOSClient.php路径下,不要把类文件直接扔在项目根目录
  2. 修正composer.json配置
    补充自动加载规则、添加缺失的第三方依赖,参考结构如下:
    {
        "require": {
            "divineomega/php-ssh-connection": "^2.2",
            // 此处补充你代码用到的RouterOS API库的依赖声明
        },
        "autoload": {
            "psr-4": {
                "RouterOS\\": "src/RouterOS/"
            }
        }
    }
    
  3. 重新生成自动加载索引
    在项目根目录打开命令行,执行命令:
    composer dump-autoload
    执行完成后,Composer会把RouterOS\命名空间对应的路径映射写入自动加载配置,此时再运行test.php即可正常实例化自定义的RouterOSClient类。

避坑提示
  • 命名空间和文件路径必须严格一一对应:比如文件存放在src/RouterOS/RouterOSClient.php,文件顶部声明的命名空间必须是RouterOS,哪怕路径差一级、命名空间少写一段,自动加载器都无法识别类
  • 所有use命名空间引用必须写在<?php代码标签内部,不能裸露在HTML结构中
  • 如果执行完上述步骤仍有加载问题,可以执行composer dump-autoload -o生成全量优化的自动加载索引,排查路径匹配偏差

内容的提问来源于stack exchange,提问作者ololo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.05 21:45:04