PHP部分相同名称空间冲突

时间:2012-09-29 20:09:36

标签: php namespaces

我有一些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我正在尝试use module1module2模型。从技术上讲,它们不在同一名称空间中。只是部分。但是为什么它给我一个关于它的错误.. ??

什么是解决这个问题的好方法?我知道我可以将其添加到第二行:

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

但我真的不喜欢这样做,因为我没有像我在其他所有类中那样(使用as关键字)。这感觉很不协调。

还有其他方法让这项工作......?或者我真的被迫在我的所有as声明中使用use关键字......? : - (

1 个答案:

答案 0 :(得分: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.
    }
}