2014-02-17 88 views
0

我想用composer和PSR-0實現名稱空間自動加載,我不知道爲什麼它不起作用。使用作曲家和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(); 
?> 

我得到這個錯誤:

Fatal error: Class 'my\user\User' not found

Fatal error: Class 'my\world\World' not found

我錯過!?任何的建議都受歡迎!謝謝。

回答

2

定義中沒有名稱空間部分「my」。

namespace user; 
class User {...} 

這個類被命名爲\user\User,不\my\user\User

這同樣適用於\world\World

因此,Composer中的命名空間定義是錯誤的。您需要兩個定義:userworld,兩者都在同一目錄中:

{ 
    "autoload": { 
     "psr-0": { 
      "user\\": "src/app", 
      "world\\": "src/app" 
     } 
    } 
} 
相關問題