//класс Приложения доступен во всех местах приложения
class Application {
public $data = array();//сюда сохраняем данные выборок, для отображения во вьюхах
...
}
//подключаем вьюхи
function include_view($fileName, $vars = array())
{
$app=Application::Instance();
...
ob_start();
include $fileName;
return ob_get_clean();
}
Далее где-то во вьюхе
<h1><?=$app->data['page']['h1']?></h1>
<?=include_view('subView.php'); ?>
Таким образом ни в модели, ни в контроллере не нужно перечислять передаваемые во вьюху переменные, преимущество в том что при доработке проекта не нужно следить, чтобы переменные обязательно прописывались в контроллере и модели. Минимизация правок.
Чем плохо? Кроме того что можно случайно затереть что-то в $app->data в каком либо модуле. Почему в популярных фрейворках жёстко прописаны переменные, и порой добавляя поле в таблицу приходится прописать переменную и закомитить ещё десяток файлов, а потом ещё писать костыли и городить огороды, чтобы отобразить в лэйауте (родительской вьюхе) переменную, которая была создана в модуле, который выводит отображение в локальную вьюху-виджет.