我對如何在Composer中使用psr-4 autoloading有點困惑。比方說,我有一個文件夾結構是這樣的:爲什麼在使用Composer使用psr-4自動加載時指定名稱空間?
/
|- Core/
| - Router.php
|- App/
| - Models
| User.php
|- composer.json
基本上,在項目的根:composer.json;一個核心文件夾包含一個路由器 PHP類; App包含的文件夾型號包含用戶類的文件夾。
Router類看起來是這樣的:
<?php
namespace Core;
class Router {
}
和用戶類看起來是這樣的:
<?php
namespace App\Models;
class User {
}
這樣我就可以自動加載這些類使用作曲家PSR-4自動加載機,我可以做這在composer.json中:
{
"autoload": {
"psr-4": {
"Core\\": "Core",
"App\\Models\\": "App/Models"
}
}
}
所以我可以使用這些類而不需要它們(運行後寧composer dump-autoload
)這樣的:
$router = new Core\Router();
$user = new App\Models\User();
它工作沒有問題。
然而,我也能做到這一點在composer.json:
{
"autoload": {
"psr-4": {
"": ""
}
}
}
其中,根據所述文檔是一個回退目錄,其中任何名稱空間可以是,相對於根。因此,通過在composer自動加載器中創建這個「空」條目,我相信它說「從根開始,在任何目錄中查找任何名稱空間中的類」,我可以自動加載我的任何類,如果我按照正確的文件夾命名/名稱空間結構。
所以我的問題是,如果後者工作並且簡單得多,我爲什麼要這樣做?這是一種表演嗎?還是有另一個原因?
我不知道......爲什麼會* *您?我不會。你爲什麼認爲你應該? – deceze
對於一個人來說,如果你有一天決定將你所有的模型移動到其他地方,使用前一種方法你可以改變一行,使用後一種方法,你需要重命名所有的命名空間。 – apokryfos
如果你在custom/library/src中有一個自定義包,那麼你可能不想做一個名爲'custom \ library \ src'的命名空間,而只是'Library'。這一切都歸結於您的項目中的約定,除了apokyrfos所製造的點外。 – Devon