Теперь, прежде чем прыгать о том, как не стоит смешивать области видимости, я это понимаю. Однако это тот случай, когда должно происходить либо смешивание области действия, либо значительное дублирование кода - ничего вокруг. И я бы предпочел смешение сфер.
Тем не менее, я хотел бы этот код:
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>
Мы бы действительно не хотели, чтобы наши авторы шаблонов делали что-то большее ... хотя $e['requested_url']
можно было бы сделать, если бы не было ничего лучше.