Почитайте про паттерн проектирования MVC
Суть паттерна заключается в изоляции моделей(Model) представлений (View) и контроллера (Controller) друг от друга.
Ну а технически изоляция переменных контроллера от представления (ваш случай сейчас) выглядит примерно так:
<?php
#app/controllers/prices.php
class PricesController extends BaseController // Контроллер. Принимает запросы и работает с моделью и представлением. В примере моем только представление.
{
function action_index()
{
$foo = 'foo';
$bar = array('bar1', 'bar2');
self::render('prices/index', array('foo'=>$foo, 'bar'=>$bar)); // метод реализован в базовом контроллере
}
}
# app/controllers/base.php
class BaseController { // Главный контроллер, от которого унаследуются все остальные. В нем могут быть всякие настройки и тд итп. В данном случае только статический метод рендеринга страницы
const VIEW_FOLDER = 'app/views';
static function render($template, $data)
{
$view = VIEWS_PATH."/{$template}.html.php";
if(file_exists($view))
{
extract($data); // Самая соль в этой функции, она создает переменные из полученного массива, именем переменной является ключ массива.
// В итоге шаблон у нас видит только эти переменные + те которые объявлены в самом методе render до инклуда, т.е. будет видна переменная $template и массив $data
ob_start();
include $view;
$yield = ob_get_clean();
include VIEWS_PATH . '/layouts/application.html.php'; // это главный лайут, содержащий хеадер и футер.
}
}
}
А вот и View:
главный лайоут:
# app/views/layouts/application.html.php
<html>
<body>
<?php echo(isset($yield) ? $yield : '')?>
</body>
</html>
шаблон вывода для нашего контроллера:
# app/views/prices/index.html.php
foo: <?php echo($foo)?><br>
bar: <?php var_dump($bar)?>
В итоге, в шаблоне prices/index.html.php будут видны переменные
$foo
и
$bar
объявленные и в нашем контроллере и переданные на рендер. (
self::render('prices/index', array('foo'=>$foo, 'bar'=>$bar));
)
P.S. Я мог гдето ошибиться, т.к. писал быстро, буквально на коленке, ничего не проверял вообще. Я хотел показать саму концепцию на примере того, как делать изоляцию переменных чтобы они не могли вызываться "где угодно" как Вы выразились.
P.S.S Работу с моделями я не писал, поэтому приведенный здесь код не является MVC, лишь VC.