Det är lite blandade koncept här i tråden och även din fråga om att "generera" html kod medans du egentligen pratar om att bara hålla en sträng med html kod i en variabel är två saker lite blandade.
Vad folk ofta "börjar med" är i princip att de använder PHP som ett template språk. Likt vad Alling skriver tex där man även kan ha en del logik med <?php if($foo === true);?> följt av <?php endif;?>. Det blir snabbt väldigt rörigt dock.
Ofta vill man förr eller senare dela upp logik, presentation, lagring osv i olika lager.
Att skriva sin frontend kod i javascript eller något javascript-bibliotek och sedan hämta, bearbeta och returnera data via PHP är populärt. Speciellt om du har en "ensidesapp" där du faktiskt inte laddar nya sidor utan endast byter ut data som presenteras så är detta det sätt som är mest lämpat.
För en mer "vanlig" site, med massa olika distinkta sidor så gör man kanske dock fortfarande mycket i backend. Någon form av existerande MVC-bibliotek för PHP eller linande hemmasnickrad lösning används då ofta för att dela upp olika ansvarsområden inom koden.
Jag själv har ett bibliotek som jag skapade för att skriva objektorienterade plugins till ett system som annars egentligen var välidgt mycket "låt din plugin exponera en index.php fil i en undermapp som publikt exponerar alla funktioner som din plugin använder". Lite hur plugins till Wordpress ser ut.
Jag började ofta med att skriva ihop klasser och det min index.php gjorde var i princip att ladda dessa och lämna över till dem. Men när jag märkte vilket mönster jag alltid följde så gjorde jag ett bibliotek med en basklass för en Plugin som skötte allt med att installera och avinstallera en Plugin osv.
Till detta gjorde jag sedan med tiden olika underkomponenter som hanterar en massa olika återkommande saker för mig. Bland annat finns klasser för att skapa och hantera HTML element.
När det behövs så gör jag lösningar via ajax och jquery också och kod kan även höra till ett speciellt element och således automatiskt inkluderas om ett givet element faktiskt skrivs ut på sidan eller inte. Om en tabell skall ritas upp så har jag en klass som jag kan sätta kolumner, addera rader (Table\Row) osv. Där jag sedan vill ha denna utskriven behöver jag bara köra en echo på objektet. Sedan har jag en klass som ärver av Table som heter DataTable och denna skapar istället en interaktiv tabell som kan sorteras, rader markeras osv. Att ta en Table och istället göra om den till en DataTable blir med en sådan här uppbyggnad så lätt att det handlar om att kalla $myTable = new DataTable('table_id'); istället för $myTable = new Table('table_id'); Då DataTable ärver ifrån en gemensam basklass som är Element som även Form, TableRow osv ärver ifrån så kan jag snabbt och lätt i PHP koden göra saker som att gå igenom min DataTable's alla rader och för varje rad gå igenom alla kolumner och sätta bakgrundsfärgen till röd för alla som har ett visst innehåll osv.
Man kan även lätt ta andra Element, tex en Form eller en Img och lagt i en av cellerna och när vårt Table skrivs ut så hade även den skrivits ut med korrekt kod för den taggen och dess attribut.
Om man talar om att "generera/skapa" HTML "i" PHP så hade nog ett sådant här system med en hirarkisk arvsstruktur med en grundläggande Element-klass i botten varit vad jag såg framför mig.