Потому что вы создаёте в цикле кучу модальных окон с одинаковыми id. А браузер, понимая что id - это уникальный элемент обнаруживает только одно окно - первое. Соответственно у вас контент меняется, но каждый раз отображается одно и тоже модальное окно.
Разница в том, что в первом случае создаётся экземпляр класса, а во втором - нет. Очевидно же!
Но думаю что вы спрашиваете немного про другое. Вы не можете просто взять и заменить один вызов другим. Они предназначены для разных целей.
1. В запросе синтаксическая ошибка. DevMan написал вам правильный запрос.
2. В $test находится не сам массив записей, а объект для доступа к результату запроса. Вам же сначала нужно разбирать результат $result = $test->fetch_assoc();, а затем анализировать $result. Сделайте var_dump($result); и сразу поймёте что нужно.
upd
Когда познаете, нужно будет написать функцию, которая:
1. Определяет есть ли следующий уровень вложенности и если есть, то выбирает этот уровень и производит вызов самой себя с этим уровнем.
2. Если следующего уровня нет, то возвращает контент из текущего уровня.
Основная проблема не изучить основные понятия ООП, а научиться объектно-ориентированному мышлению. Научиться видеть не совокупность функций, которые что то делают, а рассматривать приложение как взаимодействие объектов. ИМХО это может придти только с опытом. Я видел проекты, написанные с использованием классов, но в том же самом процедурном стиле, и это вообще не делало из программирования ООП.