PHP Object georiënteerd

MVC

Als je op basis van object georiënteerd programmeren een applicatie bouwt dan is het overzichtelijk om de klassen op te slaan in afzonderlijke bestanden. Structuur aanbrengen in grote applicaties is een kunst op zich. In de loop van de tijd zijn er een aantal modellen ontstaan die goed blijken te werken in de praktijk. Het Model-View-Controller model is er 1 van. Veel php-frameworks zijn hierop gebaseerd. Denk aan Symphony, Laravel of Code Igniter.

Model

Het model-onderdeel is verantwoordelijk voor het ophalen of opslaan van gegevens. Communiceren met een database of een filesysteem gaat op basis van classes die deze functionaliteit leveren.

View

Een view-class zorgt er voor dat gegevens worden weergegeven. Binnen een view-class wordt er geen data meer gemanipuleerd, dat is al eerder gedaan in de model- en controller-classes.

Controller

Een controller-class zorgt voor de verbinding tussen de model- en de view-classes. De controller manipuleert de data die wordt opgehaald of opgeslagen en levert de gegevens die moeten worden weergegeven aan een view-class.

Frameworks

Frameworks hebben nog meer overeenkomsten.

Routing

Normaliter geeft je webserver de pagina terug die je opvraagt met behulp van een url. Bijvoorbeeld de url https://www.example.com/test.php geeft de geïnterpreteerde inhoud van test.php terug aan de broser. Met behulp van de 'rewrite'-functie van webservers kun je zorgen voor een single point of entry'. Alle urls worden doorgestuurd naar 1 punt, te weten: index.php. In index.php wordt aan de hand van de url bekeken welke informatie wordt teruggestuurd naar de browser.
Deze methode heeft 2 belangrijke voordelen:

Middleware

Voordat een applicatie de gevraagde pagina teruggeeft aan de browser kan er vooraf nog code uitgevoerd worden. Je wilt bijvoorbeeld controleren of de gebruiker wel is ingelogd en de juiste rechten heeft om de opgevraagde pagina weer te geven.
Met middleware kan in het proces vooraf en achteraf code uitgevoerd worden. Dit is ideaal voor bijvoorbeeld:

Namespaces

Frameworks lijken veel op elkaar. Ze bieden in de basis vrijwel dezelfde functionaliteit. Er is in het Laravel framework zelfs veel code terug te vinden die ook in het Symfony-framework wordt gebruikt. Ook onderdelen van Zend-framework zie je terug in andere frameworks. Om naam-conflicten van klassen te vermijden biedt php de mogelijkheid om 'namespaces' te gebruiken. Het idee is dat iedere 'vendor' (=leverancier) zijn klassen in een mapje zet met zijn eigen naam. Zo is de Laravel\Router.php klasse een andere dan de Symfony\Router.php klasse. Beide kunnen nu in dezelfde applicatie worden gebruikt.

Autoloading

Onder autoloading wordt verstaan dat je klasses niet voortduren met include('pad/naar/klasse) hoeft te laden. Door het gebruik van een vaste structuur en afspraken (PSR-4) met namespaces en vendors is het mogelijk om klassen automatisch te laden. Hiervoor wordt composer gebruikt.

Opdrachten

Project