2016-08-01 112 views
2

不時我一直看到一倍命名空間是這樣的:
Namespace/Namespace/Subnamespace/PHP命名空間約定 - 加倍的命名空間

例如新的Prestashop(1.7)採用了這種約定
namespace PrestaShop\PrestaShop\Core;

有人能解釋我的好處這種類型的命名空間?

而且一些教程說的命名空間是這樣的:

namespace mynamespace/classname 
classs classname {} 

這樣有什麼好處呢?因爲我只會看到缺點:更復雜的命名空間和更多的輸入。

也看到了這個問答&答:PHP Namespace Questions
我可以看到唯一的缺點:更容易出現錯誤,因爲它取決於相對命名空間

PS:我一直在使用始終是絕對的命名空間。我的感覺不太容易出現錯誤,如果我錯了,請給我啓發。

+0

他們正在關注[psr-4](http://www.php-fig.org/psr/psr-4/)。命名空間本身沒有任何問題,但是我可以看到它是如何混淆的。 – Andrew

+0

@Andrew我正在寫一個符合PSR-4的答案,但似乎沒有任何需要這個子名稱空間的東西。這僅僅是創造者的選擇嗎?它是否來自PSR-0? – nerdlyist

+0

@nerdlyist我認爲這是創作者的選擇,這是我能做的唯一事情,假設。 – Andrew

回答

2

如前所述,這是用於自動加載並遵循PSR-4慣例。命名空間的命名約定通常由創建者決定。唯一需要的部分是頂級命名空間,但如果需要可以使用許多子命名空間。

例如,在PrestaShop的composer.json他們有:

"autoload": { 
    "psr-4": { 
     "PrestaShop\\PrestaShop\\": "src/", 
     "PrestaShopBundle\\": "src/PrestaShopBundle/" 
    } 
} 

所以命名空間PrestaShop\PrestaShop\可以讓你對任何事物中src

slim框架(路由器),他們有:

"autoload": { 
    "psr-4": { 
     "Slim\\": "Slim" 
    } 
} 

所以在這一個你只需要使用命名空間Slim\Class

在我的第一個項目之一,我不喜歡的東西:

"autoload": { 
    "psr-4": { 
     "App\\Models\\": "app_name/models", 
     "App\\Validators\\": "app_name/validators" 
     //And so on 
    } 
} 

我不認爲這會傷害任何東西,但到底是多餘的。