2015-07-19 154 views
13

添加自定義空間這裏是我的文件夾結構:PHP中使用自動加載磁帶機從作曲家

Classes 
    - CronJobs 
    - Weather 
     - WeatherSite.php 

我想從我的腳本加載WeatherSite類。即時通訊使用作曲家與自動加載:

$loader = include(LIBRARY .'autoload.php'); 
$loader->add('Classes\Weather',CLASSES .'cronjobs/weather'); 
$weather = new Classes\Weather\WeatherSite(); 

林假設上面的代碼添加命名空間和該名稱空間解析到的路徑。但是,當頁面加載我總是得到這樣的錯誤:

Fatal error: Class 'Classes\Weather\WeatherSite' not found 

這裏是我的WeatherSite.php文件:

namespace Classes\Weather; 

class WeatherSite { 

    public function __construct() 
    { 

    } 

    public function findWeatherSites() 
    { 

    } 

} 

我在做什麼錯?

+0

你其實並不需要自定義自動加載,你大概可以使用PSR-4。你使用'composer.json'嗎?如果是這樣,你可以在'autoload'部分添加它的內容嗎? –

+0

@托馬什Votruba我想爲我寫的,我將不得不命名空間添加到自帶的作曲家自動加載磁帶機腳本定製類? – John

回答

20

你其實並不需要自定義自動加載,你可以使用PSR-4。

更新您的autoloadcomposer.json

"autoload": { 
    "psr-4": {"Classes\\Weather\\": "Classes/CronJobs/Weather"} 
} 

爲了解釋:這是{ 「命名空間\\」: 「目錄中找到」}

不要忘了運行composer dump-autoload更新作曲者緩存。

然後你可以使用它像這樣:

include(LIBRARY .'autoload.php'); 

$weather = new Classes\Weather\WeatherSite(); 
+0

謝謝,但我該如何引用腳本中的名稱空間呢?我是否還需要將名稱空間類添加到我的自定義類文件WeatherSite.php的頂部?在調用類的腳本中,它只是$ site_weather = new Classes \ Weather \ SiteWeather()? – John

+0

我更新了我的答案。 –

+0

沒關係,我知道它的工作原理,但前提是作曲家的命名空間指向php文件所在的子目錄。因此,如果作曲家將它命名爲Classes => class/CronJobs,那麼在腳本中$ weather = new Classes \天氣\ WeatherSite();我仍然得到錯誤,但如果我將作曲家更新爲Classes => class/CronJobs/Weather,它現在可以工作。任何想法我仍然做錯了什麼? – John