Po pierwsze, jak chcesz używać php+html:
?>
<div id="<?= $user->id ?>"><?= $user->name ?><div>
<?php
Po drugie: w osobnych plikach trzymasz widoki, a renderujesz je np. tą funkcją:
/**
* render view
*
* @param string $view
* @param array $params
* @return string
*/
function render($view, $params = [])
{
$filename = str_replace(['/','\\'], DIRECTORY_SEPARATOR, $view); // zamieniamy wszystkie ukosniki na takie, jakie mamy zdefiniowane w php.ini (windows uzywa \, a php //)
ob_start(); //zaczynamy ładować (buforowac) dane
ob_implicit_flush(false);
extract($params, EXTR_OVERWRITE); //tworzymy zmienne z kluczy w tablicy $params (buforujemy)
require (VIEW_DIR . $filename . '.php'); //pobieramy plik o wczesniej zdefiniowanej nazwie (buforujemy)
return ob_get_clean(); //zwracamy zbuforowane dane w postaci stringa
}
Do drugiego argumentu możesz dać tablice ze zmiennymi. Np.:
//definiujemy katalog z widokemi (moze byc rowniez /var/www/mojastrona/widoki/ albo c:\www\mojastrona\widoki\)
define('VIEW_DIR', __DIR__ . DIRECTORY_SEPARATOR . 'view' > DIRECTORY_SEPARATOR);
// renderujemy plik o nazwie foo.php (np. pelna nazwa bylaby /var/www/mojatrona/widoki/foo.php )
echo render('foo', ['bar' => 'baz']); //
/* plik foo.php */
/* @var $bar string */
/* <?= <- to jest to samo co <?php echo */
?>
<div><?= $bar ?></div>
<!-- pokaże baz -->
Jako element tablicy możesz cokolwiek wrzucić.
PS nie zapomnij zdefiniowac katalogu z widokami.