2012-09-29 60 views
1

我這是這樣定義的幾個PHP類:PHP部分相同的命名空間衝突

module1Model.php

namespace App\Modules\module1\models; 

class module1Model 
{ 
    //... methods etc. 
} 

module2Model.php

namespace App\Modules\module2\models; 

class module2Model 
{ 
    //... methods etc. 
} 

在一些其他類我想使用這些名稱空間。所以我把下面的線在我的頁面的頂部:

someClass.php

namespace App\Modules\someClass\controllers; 

use App\Modules\module1\models; // Works 
use App\Modules\module2\models; // Fails 

use Core\Logger\TextLogger; // Works 

class somceClass 
{ 
    //... methods etc. 
} 

所以在someClass我試圖usemodule1module2模型。技術上它們不在同一個命名空間中。只是部分。但是爲什麼它給了我一個關於它的錯誤呢?

什麼是解決此問題的好方法?我知道我可以將它添加到第二行:

use App\Modules\module2\models as module2; // Now works 

但我真的不喜歡這樣做的,因爲我沒有那樣做,我的所有其他類(使用as關鍵字)。這感覺很不一致。

是否有任何其他方式使這項工作..?或者我真的不得不在我所有的use聲明中使用as關鍵字......? :-(

+3

都能跟得上整個命名空間的目的是區分具有相同名稱的類。 – JvdBerg

回答

1

我猜你要使用的模型類,而不是他們的整個的命名空間。如果是這樣,那麼下面的只是工作:

use App\Modules\module1\models\module1Model; 
use App\Modules\module2\models\module2Model; 

例:

namespace App\Modules\module1\models { 
    class module1Model 
    { 
     //... methods etc. 
    } 
} 

namespace App\Modules\module2\models { 
    class module2Model 
    { 
     //... methods etc. 
    } 
} 
namespace App\Modules\someClass\controllers { 

use App\Modules\module1\models\module1Model; 
use App\Modules\module2\models\module2Model; 

use Core\Logger\TextLogger; 

    class somceClass 
    { 
     //... methods etc. 
    } 
}