2014-12-18 45 views
7

标题说话自己。因此,这里是我的项目结构:PHP Composer自动加载器类没有发现异常

|src 
    |Database 
     |Core 
      |MySQL.php 
     |Support 
    start.php 
|vendor 
composer.json 
index.php 

MySQL.php文件:

<?php 
namespace Database\Core; 
//Some methods here 

的index.php和start.php文件:

//start.php file 
<?php 
require __DIR__ . '/../vendor/autoload.php'; 
?> 

//index.php file 
<?php 
use Database\Core; 
require __DIR__ . '/src/start.php'; 

$mysql = new MySQL(); // Gets exception Class 'MySQL' cannot found etc. 
?> 

最后我composer.json自动加载部分:

"autoload": { 
    "psr-4": "Database\\": "src/" // Also tried "src/Database" too 
} 

问题在哪里?我非常厌倦尝试应对这种情况。请帮助家伙!谢谢。

回答

17

您需要包括当你初始化类的命名空间:

$mysql = new Database\Core\MySQL(); 

use Database\Core\MySQL; 
$mysql = new MySQL(); 

Using namespaces: Aliasing/Importing

+1

谢谢我真的很感激,但不能投票,由于低信誉:) – lostbyte

+0

让我为你投票:) –

4

除了不使用前面已经提到,PSR权use声明-4不能这样工作。它更像是一个别名。你基本上说src等于Database。因此,在那里有一个名为Database的目录意味着完全限定名称空间+类等于'Database \ Database \ Core \ MySQL`。您希望在这种情况下使用PSR-0,或者调整您的PSR-4定义。

+0

扩大一点这个好答案:你不希望你的名字空间是东西通用如“数据库”。您希望使用其他php软件包可能已经使用的东西,因此您公司/组织的名称是一个不错的选择,例如,如果你的公司被命名为Acme棒球卡,一个好的命名空间可能是“AcmeBaseball”。在你的Mysql.php文件中,命名空间是'namespace AcmeBaseball \ Database \ Core;'和composer.json'“psr-4”:“AcmeBaseball \\”:“src /”'如果你安装一个composer包,比如AWS Php SDK;打开他们的compser.json,命名空间是'Aws' – KayakinKoder