Eğer kapsamları karışmaz nasıl atlamak önce Şimdi: ben bu fark. Ancak, bu kapsam karıştırma ya gerçekleşmelidir veya büyük kod çoğaltılması, meydana bir şey olmalıdır etrafında bir durumdur. Ve ben kapsam karıştırmayı tercih ederim.
O dedi, ben bu kodu istiyorum:
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
yorumladı olarak çalışmak mümkün. Ben-ben dilleri olsa, Ruby bunu başardı çoğu mümkün değil biliyorum; ve merak PHP ile bunu yapabilir.
Değişken isimleri gerçek durumda önceden bilinmemektedir.
Yine, kod çoğaltılması ya da çevresinde bu-kesinlikle hiçbir yolu yoktur.
a a('b') falan gibi bir şey olsaydı da, tamam olurdu.
Gerçekte, kod şudur:
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")));
}
Gibi bir çağrı ile E_Render::renderError('NotFound', array( 'requested_url' => '/notfound', 'misspelling' => '/reallynotfound' ));
Ardından, şablonlar / NotFound.php, sen gibi bir şey olurdu:
<html>
<body>
<?php echo $e_requested_url; ?> could not be found. Did you mean <?php echo $e_misspelling: ?>?
</body>
</html>
Biz gerçekten oldukça bizim şablon yazarlar bundan daha fazla bir şey yapmak zorunda değilsiniz ki ... iyi bir şey mevcut olsaydı $e['requested_url'] yapılabilir rağmen.