有一個在你提到的那些名字空間沒有更好或更壞。
命名空間已添加到語言以防止在單獨的包中發生名稱衝突。
例如,你可以有一個類User
在自己的名稱空間\MyApp\User
,並且還使用了一個名爲User
類第三方軟件包,但在其自己的命名空間\Package\User
。
這是最初的想法。後來,人們決定我們可以使用這個命名空間來自動加載一些類。一個原始的想法是應該在MyApp/User.php
中找到\MyApp\User
。很簡單。
這個擁有先進的,當然,你可以通過搜索「PHP自動加載」或更好「的作曲家自動加載」閱讀更多有關。
以及有關初始\
,它並沒有在一些地方重要,但它的問題在其他地方。當聲明一個命名空間時,它並不重要,例如namespace \MyApp\User
與namespace MyApp\User
相同。此外,use
聲明的行爲如此。但是當你要使用一個班級,即new \MyApp\User()
vs new MyApp\User
,它確實不同。你可以在PHP documentation找到更多的信息。
好的,足夠的背景。你的問題具體。
我知道初始\是可選的,但是mydomain前綴是什麼?它是必需的還是可選的?
至於Laravel情況下,它是不可選的。看看composer.json
,在psr-4
下,你會發現app
文件夾有一個爲命名空間定義的前綴。這就是你應該使用的類(如果他們在app
文件夾中)。要了解更多信息,請查找PSR-4。
它有什麼區別使用dev.mydomain.com是或只是mydomain?
我想我已經提到過PSR-4,所以請使用任何東西。
它只是一個與文件夾名稱相同的問題嗎?
這也是PSR-4。閱讀更多信息,並回答所有問題。
但總而言之,我們有兩個基於PHP命名空間自動加載類的標準:PSR-0和PSR-4。
在PSR-0(舊),該目錄結構必須命名空間完全匹配,也就是說,如果你的根文件夾爲src
,你班被命名爲\Package\User
,那麼你在你的文件系統有src/Package/User.php
。
在PSR-4中,我們可以爲目錄設置名稱空間前綴。例如,你說無論在文件夾src
中,它只是以\App\Package
命名空間開始。一個名爲\App\Package\User
的類應該駐留在src/User.php
,當然有正確的命名空間。這正是Laravel所使用的,以及現在大部分的軟件包。
初始斜線指的是[全局命名空間](http://www.php.net/manual/en/language.namespaces.global.php)。如果在命名空間之前使用'dev'或者不使用,則無關緊要。這只是一個名字空間。文件夾名稱本身與名稱空間無關,但某些加載程序確實將名稱空間用作文件夾的映射。看看[這裏](https://daylerees.com/php-namespaces-explained/)以獲得更全面的解釋。 – Andrew
'myproject \ app \ controllers'和'\ app \ controllers'和'app \ controllers'有區別嗎? – Maxcot
是的。有。根據laravel使用的加載標準[psr-4](http://www.php-fig.org/psr/psr-4/),命名空間必須是'\(\ )* \ '其中'SubNamespaceNames'可以任意多。 –
Andrew