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";
    }
}
?>

用户.php

<?php
namespace user; 
class User {
    public function hello() {
        return "hello user";
    }
}
?>

作曲家.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();
?>

我收到此错误:

致命错误:找不到类 'my\user\User'

致命错误:找不到类 'my\world\World'

我想念什么!?任何的建议都受欢迎!谢谢。

4

1 回答 1

2

您的定义中没有命名空间部分“我的”。

namespace user; 
class User {...}

这个类是命名\user\User的,不是\my\user\User

这同样适用于\world\World

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

{
    "autoload": {
        "psr-0": {
            "user\\": "src/app",
            "world\\": "src/app"
        }
    }
}
于 2014-02-17T23:36:57.493 回答