現在,在跳轉之前,您應該如何不應混合範圍:我意識到這一點。但是,這是一種情況,即必須發生範圍混合或必須發生主要代碼重複 - 周圍沒有任何東西。我更喜歡範圍混合。在PHP中導出變量到以前的範圍
這麼說,我想這樣的代碼:
function a() {
$a = "a";
$b = "b";
$c = "c";
}
function b() {
a();
echo $a . $b . $c;
}
b(); // Output: abc
echo $a; // Should raise a notice that $a is undefined
能夠作爲評價工作。我知道在大多數語言中這是不可能的,但我可以在Ruby中完成;並想知道你是否可以用PHP來做到這一點。
事實上,事先並不知道變量的名稱。
再次,它是代碼重複或這 - 絕對沒有辦法繞過它。
另外,如果a
必須是a('b')
之類的東西,那就沒關係了。
在現實中,代碼是這樣的:
static function renderError($what, $vararray) {
foreach($vararray as $key => $val) { /* this foreach is the code we want to decouple */
$key = 'e_'.$key;
$$key = htmlspecialchars($val);
}
ob_clean();
exit(eval('?>'.file_get_contents(ROOT."/templates/$what.php")));
}
有了這樣E_Render::renderError('NotFound', array('requested_url' => '/notfound', 'misspelling' => '/reallynotfound'));
通話
然後,在模板/ NotFound.php,你會碰到這樣的:
<html>
<body>
<?php echo $e_requested_url; ?> could not be found. Did you mean <?php echo $e_misspelling: ?>?
</body>
</html>
我們真的不想讓我們的模板作者做更多的事情......雖然如果沒有更好的可用的話,可以完成。
保留變量名$ a,$ b,$ c是至關重要的。好吧。 – 2010-08-22 00:54:13
+1你先知道了。您沒有聲明$ a,$ band $ c作爲班級成員? – NAVEED 2010-08-22 00:54:43
@NAVEED不需要。 PHP可以在運行時添加類成員 – NullUserException 2010-08-22 00:58:02