使用Composer时PHP自动加载与命名空间问题求助
问题解决步骤
1. 修正文件名(核心问题)
PSR-4自动加载规则要求类文件名必须和类名完全一致(大小写敏感),你当前的文件名和类名不匹配,导致自动加载器找不到文件:
- 将
src/A/a.php重命名为src/A/Test_A.php - 将
src/B/b.php重命名为src/B/Test_B.php - 将
src/C/c.php重命名为src/C/Test_C.php
2. 简化composer.json的autoload配置
你当前的配置重复定义了子命名空间映射,PSR-4会自动根据子目录匹配子命名空间,只需要保留根前缀即可:
{ "name": "test/test-namespace", "autoload": { "psr-4": { "Test\\TestNamespace\\": "src/" } }, "authors": [], "require": {} }
3. 重新生成自动加载缓存
修改composer.json后,必须执行以下命令更新自动加载文件:
composer dump-autoload
4. 验证调用代码
你的index.php代码本身没有问题,现在执行php index.php就能正常输出Test_A并实例化类。
补充:命名空间与PSR-4的核心逻辑
命名空间本质是给类添加"前缀"避免冲突,PSR-4的匹配规则是:
- 命名空间前缀
Test\TestNamespace\对应磁盘目录src/ - 子命名空间
A对应src/A/目录 - 类名
Test_A对应该目录下的Test_A.php文件
完整类名 Test\TestNamespace\A\Test_A 会被自动加载器解析为 src/A/Test_A.php 文件,这就是自动加载的核心原理。
内容的提问来源于stack exchange,提问作者Ed Ke
相关产品推荐
相关产品推荐

