2017-10-06 62 views
0

我有一個項目,包括定義一個類名爲Response,我自動加載通過作曲家狂飲(也限定它自己的Response類)的PHP文件自動加載包,其中包含同名類爲進口類

現在的問題是,我是否會面臨PHP應該使用哪個Response類而感到困惑的風險?如果我自己使用Response,那麼我不會冒風險,它會以某種方式獲取Guzzle類,除非我的use陳述正確嗎?

我認爲這很好,除非我做use聲明,但我只是想確定。

+1

從基本上講,只要類有自己的唯一命名空間 – unherz

回答

1

您沒有衝突的任何風險,這就是爲什麼PHP Namespaces存在!
儘管這兩個類別的短名稱都相同,但它們的FQCN(完全限定類名稱)是不同的,所以不會有混淆的可能性。

狂飲的Response類是:

\Guzzle\Http\Message\Response 

你的類會是這樣的:

\MyApp\Response 

(或只是\Response如果你沒有爲它設置一個命名空間,這是一個非常糟糕的練習!)

你可以use其中任何一個在你的課堂,或者甚至兩個,只要你爲其中之一設置別名:

use \MyApp\Response; 
use \Guzzle\Http\Message\Response as GuzzleResponse; 

// ... 

$myResponse = new Response(); 
$guzzleResponse = new GuzzleResponse(); 
0

只要類有個別的命名空間。

Composer(及其autolaoder)將使用類名解析名稱空間。 因此,如果您使用具有不同名稱空間的自己的類(「Class1」)和具有相同類名(「Classname」)的外部類(「Class2」),例如

namespace \Me\MyPackage\Classname

namespace \Guzzle\Classname

,你將被罰款。如果你想創建其中一個類的實例,只需輸入完整限定名稱空間,例如

$var1 = new \Me\MyPackage\Classname();