2015-10-04 59 views
1

我使用PSR-4學習自動加載我CALSS,但我有沒有運氣,這是我的文件夾結構我不能自動加載使用我的課PSR-4

enter image description here

這是裏面的代碼我「 Employee.php」

namespace app\Employee; 


class Employee 
{ 
    public function __construct(){ 
     echo "hello employee"; 

    } 

} 

,並在我的index.php

use app\Employee; 


    $emp = new Employee; 

這裏是我的C omposer.json

{ 
    "autoload": { 
    "psr-4": { 
     "Employee\\":"app/Employee" 
    } 
    } 
} 
+0

在composer Employee \\中與您的應用程序\ Employee名稱空間不匹配。它可能只是「app \\」:「app」。在index.php中,您正在實例化app \ employee,而在您的結構中,您必須執行「使用app \ Employee \ Employee」。我猜想文件夾「員工」應該是「模型」,「控制器」或類似的。 – JimL

+0

@JimL你是什麼意思應該是模型 – jemz

回答

-1

您當前的自動加載器希望將「Employee」命名空間映射到「app/Employee /」目錄中。

您的設置,您需要在index.php中添加

use Employee\Employee; 

$emp = new Employee(); 

而且Employee.php的實際命名空間將是:

namespace Employee; 

class Employee {} 
+0

雖然你的答案是正確的,但它變化太多。爲什麼要改變'app/Employee'中所有類的名稱空間以及代碼中其他部分的所有'use'子句,如果只需修改'composer.json'中的修改就可以修改它? – Sven

-1

變化

use app\Employee; 

$emp = new Employee; 

到:

use Employee\Employee; 

$emp = new Employee(); 
+0

這將仍然無法加載類,因爲它位於名稱空間「app \ Employee」中。您建議將其置於「Employee \ Employee」中。 – Sven

-1

從你的代碼中Employee.php

namespace app\Employee; 

這是你,如果你想訪問類使用的名稱空間。

PSR-4在作曲家的工作原理是這樣的:

"autoload":{"psr-4": { "Namespace\Prefix":"a/path"}} 

當加載類「名稱空間\前綴\班」,作曲家將看到PSR-4項和比較,如果加載啓動類與字首。它確實!現在,它從類名中刪除檢測到的前綴,並將其餘部分視爲相對於「a/path」的路徑和文件名。

所以該類的其餘部分是「Class」,並且因爲沒有反斜線,所以直接使用文件名「Class.php」(注意大寫的文件名)。該文件在「a/path/Class.php」中搜索。

對於你的情況,你差不多都做對了 - 唯一的事情是:你的名字空間前綴composer.json不是Employee\ - 你在上面的代碼中給出了正確的前綴。