使命名空间声明有条件


make NAMESPACE declaration conditional?

我将myfile.php文件包含了2次。我想知道是否有办法把myfile.php的开头像这样:

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方法和单例/依赖注入设计模式来克服这些问题。