2010-08-16 47 views
2

我一直在使用下面的片段包括多個文件:批處理文件包括在保持命名空間的清潔

foreach(glob(APP_PATH."libs/*.php") as $path) 
{ 
include $path; 
} 

的事情是,我不希望有可用的內部包含在$ PATH變量文件。


虛擬解決方案:

include unset($path); 

,如果取消設置返回unsetted變量的值,這會工作。它並沒有。它返回void。

+0

取消它在循環之後? – 2010-08-16 11:08:58

+0

我可以,但變量仍然可以在包含的文件中訪問。 – 2010-08-16 11:12:07

回答

4

你可以寫你自己的unset返回值...

function unsetr(&$value) { 
    $result = $value; 
    unset($value); 
    return $result; 
}
+0

這可能做吧:) – 2010-08-16 11:13:19

+0

很高興看到!祝你好運! – 2010-08-16 11:13:59

+0

是否在函數名稱的末尾添加「r」表示該函數返回一個值?如果是的話,你能給我一個接受這種做法的另一個PHP函數的例子嗎? – 2010-08-16 11:15:36

2

作爲您使用的foreach,在每個循環後變量被重置和重用。

例如:

foreach(glob(APP_PATH."libs/*.php") as $path) 
{ 
    include $path; 
    //$path is now set to the next variable. 
} 

所以你只需要在foreach循環結束來取消$path一次。

例如:

foreach(glob(APP_PATH."libs/*.php") as $path) 
{ 
    include $path; 
} 
unset($path); 

喬布斯已經完事了,$路徑是從內存完全免費的和明確的。


您是否嘗試了以下方法。

function HideString(&$_) 
{ 
    $t = $_; 
    unset($_); 
    return $t; 
} 

foreach(glob(APP_PATH."libs/*.php") as $path) 
{ 
    include HideString(&$path); 
} 
+0

但是變量仍然可以在包含的文件中訪問。 – 2010-08-16 11:11:25

+0

已更新,但看起來像'德蘭Azabani'擊敗了我:(大聲笑 – RobertPitt 2010-08-16 11:20:45

-1

要防止包含文件中的$ path可用,請嘗試使用eval("include $path;")。我不知道eval()裏面的vars會發生什麼...

把它放到一個函數/方法中,然後它只在函數(namespace)中可用。

+0

你真的會用這樣的小工作eval? – RobertPitt 2010-08-16 11:31:08

+0

我會使用eval(),如果它最早的解決方案...例如這個http: //github.com/sebastianbergmann/phpunit/blob/master/PHPUnit/Framework/TestCase.php#L1142 – powtac 2010-08-16 13:22:27

+0

使用eval的原因是將生成的類帶入作用域,它們的規則不適用於此。 – RobertPitt 2010-08-17 08:14:46