Wat een onzin argumenten hoor je toch altijd langskomen in dit soort topics. 2 voorbeelden zie je hierboven. Een beetje webhost heeft een optimizer geinstalleerd, daarmee elimineer je het tijdverlies doro parsing bijna helemaal. De tijd die je kwijt bent met het includen van een bestand is zo klein dat het bijna verwaarloosbaar is. Het wordt er dus zeer zeker niet heel traag van. Wat belangrijk is, is dat je een nette scheiding hebt tussen je logica en je presentatie, en als het even kan, ook nog een scheiding tussen je logica en je gegevens opslag. Als je veel php tussen je HTML hebt staan betekent dat vaak dat je je logica mixt met je presentatie, en dat is een slechte manier van werken. Je moet dan tussen je presentatie code gaan zitten zoeken naar functionaliteit die gewijzigd of gedebugged moet worden. Dat is zeker niet wat je wilt. Een beetje php tussen je HTML is zeker te rechtvaardigen. Het scheiden van code, die direct in relatie staat tot de presentatie, van de presentatie is eveneens fout. Dat hoort er zelfs tussen te staan.
Ik heb zelf verschillende methodes uitgeprobeerd. Ik ben zelf begonnen met PHP code direct te mixen met de HTML, maar daar begon ik al snel de nadelen van te merken en te voelen. Het is gewoon niet onderhoudbaar. Wil je een aanpassing in je ontwerp maken, dan zit je ook opgescheept met allerlei PHP code wat er weinig mee te maken heeft.
Hierna ben ik doorgegaan met het opbouwen van een associatieve array waarin alle waardes stonden, en dan een bestand te includen waarin die waardes uitgelezen werden, dat werkte al een stuk beter. Ik had echt nog wel alle logica tussen het opbouwen van die array staan, wat nog steeds nadelig was. Nog een stap verder is om al die logica naar aparte functies te verplaatsen en de code die de array opbouwt die functies op bepaalde momenten te laten aanroepen.
Uiteindelijk zijn die functies objecten geworden met bijbehorende data, en als presentatie gebruik ik nu classes die een stuk presentatie renderen. Daarbij heb ik dan een controller die de gegevens ophaalt (puur door middel van andere objecten) en een presentatie class instantieert met de gewenste data. Nu denk je mischien dat het mixen van HTML code in een class vreemd is, maar zo'n class heeft maar 1 enkele taak: het renderen van een stuk HTML. Als je dat aanhoudt, dan werkt dat perfect. Het afhandelen van acties gebeurt puur via de controller die andere objecten aanroept (en dus in feite zelf niets afhandelt, alleen doortstuurt). Deze manier van werken wordt ook wel het MVC (Model-View-Controller) pattern genoemd. Het opbouwen van een associatieve array en het includen van een bestand met HTML wat die array gebruikt is daar net zo goed een voorbeeld van (mits die code niets zelf afhandeld, maar alles doorstuurd (naar functies of objecten)), alleen dan niet object georienteerd.
Zelf werk ik altijd op deze manier:
PHP:
1
2
3
4
5
| <ul>
<? foreach ( $object->getWaardes() as $waarde ) { ?>
<li><?=$waarde?></li>
<? } ?>
</ul> |
Of een iets complexer voorbeeld wat meer php code vraag (die dus
wel bij je presentatie hoort):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| function printFields($fields)
{
?>
<ul>
<? foreach ( $fields as $field ) { ?>
<li>
<?=$field['value']?>
<? if ( count($field['childFields']) > 0 ) printFields($field['childFields']); ?>
</li>
<? } ?>
</ul>
<?
}
printFields($data['fields']); |
Dit is voor mij de meest effectieve manier gebleken. Iedere regel php code die tussen HTML staat begint met <? en eindigt met ?>. Als je veel van die regels naast elkaar hebt staan, dan is het beter om dat door de controller te laten opbouwen en bepalen. Je voegt dan een extra stap tussen het renderen in. Dat maakt de HTML code een stuk duidelijker en gemakkelijker aanpasbaar.