我想使用composer和PSR-0实现命名空间自动加载,我不知道它为什么不起作用。
有我的文件结构:
src
|app
| world
| World.php
| user
| User.php
vendor
Test.php
composer.json
World.php 中的
<?php
namespace world;
class World {
public function hello() {
return "hello world";
}
}
?>
User.php 中的
<?php
namespace user;
class User {
public function hello() {
return "hello user";
}
}
?>
composer.json 中的
{
"autoload": {
"psr-0": {
"my": "src/app"
}
}
}
当我在 Test.php :
中测试时<?php
require 'vendor/autoload.php';
class Myworld {
public function testhello() {
$w = new my\librairie\World();
echo $w->hello();
$u = new my\user\User();
echo $u->hello();
}
}
$m = new Myworld();
$m->testhello();
?>
我收到此错误:
我错过了什么!任何的建议都受欢迎!感谢。致命错误:未找到“我的\用户\用户”类
致命错误:未找到“我的\ world \ World”类
答案 0 :(得分:2)
您的定义中没有名称空间部分“my”。
namespace user;
class User {...}
此类名为\user\User
,而不是\my\user\User
。
同样适用于\world\World
。
因此,Composer中的命名空间定义是错误的。在同一目录中,user
和world
都需要两个定义:
{
"autoload": {
"psr-0": {
"user\\": "src/app",
"world\\": "src/app"
}
}
}