我的应用中有两个编写器包,它们在第三方模块中创建命名空间冲突。我试图确定在第三方模块中消除歧义的破坏性最小的方法,以便我不必分叉包。
Vendor X的第一个包,位于
之类的目录结构中 path/to/vendor/VendorX/MailPackageA
:
<?php
namespace MailPackageA;
class Mail {
...
}
我现有的第三方模块,其中VendorX/MailPackageA
列为依赖项,位于
moduleDirectory/MailingModule/mail.inc
:
<?php
class ThirdPartyMailMod implements CoreMailSystem {
$mail_object = new MailPackageA\Mail();
. . .
}
对于在另一个模块中使用的稍微不同的邮件功能,我必须添加一个使用相同namespace
标识符(MailPackageA
)的包,但是来自不同的供应商,&#34; VendorY&#34 ;。与VendorX / MailPackageA一样,它位于像
path/to/vendor/VendorY/MailPackageA
:
<?php
namespace MailPackageA;
class Mail {
...
}
添加此内容后,我在$mail_object = new MailPackageA\Mail();
的MailingModule / mail.inc中收到错误,因为来自MailPackageA\Mail
和VendorY
的{{1}}类之间明显存在名称空间冲突。
路线我已经失败但失败了:
尝试使用VendorX
向MailingModule / mail.inc文件添加供应商前缀别名。
use
我怀疑我的应用程序不了解供应商目录。不知道如何强迫它。
确保MailingModule仅使用Vendor X中的MailPackageA \ Mail类,破坏性最小的方式(即最小分叉/修补)是什么?
答案 0 :(得分:0)
要解决此问题,请在使用alias
时使用namespace
。
像这样使用as
关键字
use VendorX\MailPackageA as newPackageName;
如果你需要从这个命名空间调用这个类,你就会有这样的
$packageName = new newPackageName\Mail();