我有一個項目,包括定義一個類名爲Response
,我自動加載通過作曲家狂飲(也限定它自己的Response
類)的PHP文件自動加載包,其中包含同名類爲進口類
現在的問題是,我是否會面臨PHP應該使用哪個Response
類而感到困惑的風險?如果我自己使用Response
,那麼我不會冒風險,它會以某種方式獲取Guzzle類,除非我的use
陳述正確嗎?
我認爲這很好,除非我做use
聲明,但我只是想確定。
我有一個項目,包括定義一個類名爲Response
,我自動加載通過作曲家狂飲(也限定它自己的Response
類)的PHP文件自動加載包,其中包含同名類爲進口類
現在的問題是,我是否會面臨PHP應該使用哪個Response
類而感到困惑的風險?如果我自己使用Response
,那麼我不會冒風險,它會以某種方式獲取Guzzle類,除非我的use
陳述正確嗎?
我認爲這很好,除非我做use
聲明,但我只是想確定。
您沒有衝突的任何風險,這就是爲什麼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();
只要類有個別的命名空間。
Composer(及其autolaoder)將使用類名解析名稱空間。 因此,如果您使用具有不同名稱空間的自己的類(「Class1」)和具有相同類名(「Classname」)的外部類(「Class2」),例如
namespace \Me\MyPackage\Classname
namespace \Guzzle\Classname
,你將被罰款。如果你想創建其中一個類的實例,只需輸入完整限定名稱空間,例如
$var1 = new \Me\MyPackage\Classname();
從基本上講,只要類有自己的唯一命名空間 – unherz