Почему не работает код в задаче гостевая книга на php?
По порядку: 
Браузер выдает следующую ошибку:Во первых не браузер, а сервер, а браузер ее только отображает. Во вторых это уведомление и предупреждение, а не ошибка. 
Далее, если ваш $view->assign('persons', $data); работает верно - значит в индексе ДО этого места в дата ничего нет. Что легко проверить с помощью вар_дамп. И если там не пусто - что-то в вашем вью работает криво, или не так как вы предполагаете, читайте документацию к данному методу.
Метод render() в классе View работает не так, как вы этого ожидаете.

Когда вы подключаете шаблон, то в данном случае там доступен только $this, а $this - это сам объект View.
Поэтому получить массив персон вы можете только через $this->data['persons'] и никакой $persons там естественно нет.
т.е. в шаблоне работать будет только так
//...
foreach ($this->data['persons'] as $person) {
  echo $person['lastName'];
//  ...
}
Понимаете?

Для того, что был доступ в шаблоне именно к переменной $persons, вам надо импортировать её в методе render() с помощью функции extract() или через присваивание переменной переменной
public function render(string $template) 
{
  ob_start();
  // функция импорта
  extract($this->data, EXTR_OVERWRITE);
  include $template;
  $content = ob_get_contents();
  ob_end_clean();

  return $content;
}
Либо через переменные переменных

public function render(string $template) 
{
  ob_start();
  // Импорт
  foreach($this->data as $key => $value) {
   // Переменные переменных $$
    $$key = $value;
  }
  include $template;
  $content = ob_get_contents();
  ob_end_clean();

  return $content;
}
В том и другом случае результат одинаковый.

И тогда в шаблоне вы уже сможете работать непосредственно с $persons