2014-12-18 46 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