2016-11-17 68 views
0

我包括myfile.php文件的2倍..我想知道是否有办法可以把在myfile.php像这样开始:是否使NAMESPACE声明有条件?

if($authorized){ 
    Namespace MyProject; 
} 

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

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

更新: 我这样做,是因为我需要定义function XYZ()和使用其他框架加载之前(其中新全球function XYZ()定义)。所以我想在框架加载之前使用该功能(使用不同的功能),并且在框架加载之后,它应该像框架决定那样工作。

+0

我很确定你不能这样做。 –

+1

你究竟在做什么*你想在这里做什么?这听起来像你正试图解决错误的问题。 –

+1

功能重新定义错误正是为什么命名空间已被实施...我不认为你完全明白你想在这里实现 –

回答

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