我一直在使用下面的片段包括多個文件:批處理文件包括在保持命名空間的清潔
foreach(glob(APP_PATH."libs/*.php") as $path)
{
include $path;
}
的事情是,我不希望有可用的內部包含在$ PATH變量文件。
虛擬解決方案:
include unset($path);
,如果取消設置返回unsetted變量的值,這會工作。它並沒有。它返回void。
我一直在使用下面的片段包括多個文件:批處理文件包括在保持命名空間的清潔
foreach(glob(APP_PATH."libs/*.php") as $path)
{
include $path;
}
的事情是,我不希望有可用的內部包含在$ PATH變量文件。
虛擬解決方案:
include unset($path);
,如果取消設置返回unsetted變量的值,這會工作。它並沒有。它返回void。
你可以寫你自己的unset
返回值...
function unsetr(&$value) { $result = $value; unset($value); return $result; }
這可能做吧:) – 2010-08-16 11:13:19
很高興看到!祝你好運! – 2010-08-16 11:13:59
是否在函數名稱的末尾添加「r」表示該函數返回一個值?如果是的話,你能給我一個接受這種做法的另一個PHP函數的例子嗎? – 2010-08-16 11:15:36
作爲您使用的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);
}
但是變量仍然可以在包含的文件中訪問。 – 2010-08-16 11:11:25
已更新,但看起來像'德蘭Azabani'擊敗了我:(大聲笑 – RobertPitt 2010-08-16 11:20:45
要防止包含文件中的$ path可用,請嘗試使用eval("include $path;")
。我不知道eval()裏面的vars會發生什麼...
把它放到一個函數/方法中,然後它只在函數(namespace)中可用。
你真的會用這樣的小工作eval? – RobertPitt 2010-08-16 11:31:08
我會使用eval(),如果它最早的解決方案...例如這個http: //github.com/sebastianbergmann/phpunit/blob/master/PHPUnit/Framework/TestCase.php#L1142 – powtac 2010-08-16 13:22:27
使用eval的原因是將生成的類帶入作用域,它們的規則不適用於此。 – RobertPitt 2010-08-17 08:14:46
取消它在循環之後? – 2010-08-16 11:08:58
我可以,但變量仍然可以在包含的文件中訪問。 – 2010-08-16 11:12:07