使NAMESPACE声明有条件?

时间:2016-11-17 21:11:07

标签: php namespaces

我将myfile.php个文件包含2次..我想知道是否有办法将myfile.php这样的内容放入其中:

if($authorized){
    Namespace MyProject;
}

function ABC(){}
function EFG(){}

(我这样做是为了避免功能重新定义错误。请不要问我为什么要做这样的事情......我知道有if function_exists等等......但我需要回答我的问题。

更新 我这样做,因为我需要定义function XYZ()并在加载其他框架之前使用它(新定义全局function XYZ())。所以我想在框架加载之前使用该函数(具有不同的功能),并且在框架加载之后,它应该像框架决定一样运行。

1 个答案:

答案 0 :(得分:2)

  

有没有办法让命名空间有条件?

虽然这是不可能的直接,但我建议您使用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方法来克服这些问题和Singleton / Dependency Injection设计模式。