使用composer和PSR-0进行命名空间自动加载

时间:2014-02-17 23:15:48

标签: php namespaces composer-php autoload psr-0

我想使用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”类

我错过了什么!任何的建议都受欢迎!感谢。

1 个答案:

答案 0 :(得分:2)

您的定义中没有名称空间部分“my”。

namespace user; 
class User {...}

此类名为\user\User,而不是\my\user\User

同样适用于\world\World

因此,Composer中的命名空间定义是错误的。在同一目录中,userworld都需要两个定义:

{
    "autoload": {
        "psr-0": {
            "user\\": "src/app",
            "world\\": "src/app"
        }
    }
}