是否使NAMESPACE声明有条件?
问题描述:
我包括myfile.php
文件的2倍..我想知道是否有办法可以把在myfile.php
像这样开始:是否使NAMESPACE声明有条件?
if($authorized){
Namespace MyProject;
}
function ABC(){}
function EFG(){}
(我这样做是为了避免功能重新定义错误,请不要问我为什么要做这样的事情..我知道有if function_exists
等等,但我需要的是我所要求的答案)。
更新: 我这样做,是因为我需要定义function XYZ()
和使用其他框架加载之前(其中新全球function XYZ()
定义)。所以我想在框架加载之前使用该功能(使用不同的功能),并且在框架加载之后,它应该像框架决定那样工作。
答
有没有办法让命名空间的条件?
虽然这是不可能的直接,我可以建议使用define()
方法来创建自己。需要该类的文件需要有允许的定义才能访问该文件。
define('IN_NAMESPACE', 0);
if(defined('IN_NAMESPACE')) {
// authorized
}
但被重复,如果你担心一个类名,命名空间是环境的声明,使你没有得到重复,例如:
namespace Environments\One;
class Example { }
namespace Environments\Two;
Class Example { }
use Environments\One\Example as ExampleOne;
use Environments\Two\Example as ExampleTwo;
$e_o = new ExampleOne();
$e_t = new ExampleTwo();
或者干脆,直接说你将使用这样的环境,如下所示:
$e_o = new Environments\One\Example();
$e_t = new Environments\Two\Example();
但是,这个问题再一次出现,并不是PHP的规范。使用MVC方法来克服这些问题和单例/依赖注入设计模式。
我很确定你不能这样做。 –
你究竟在做什么*你想在这里做什么?这听起来像你正试图解决错误的问题。 –
功能重新定义错误正是为什么命名空间已被实施...我不认为你完全明白你想在这里实现 –