2016-11-17 46 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方法來克服這些問題和單例/依賴注入設計模式。