Wat is PSR-4?
Dirk Jan Laros · 10 minuten leestijd · Gepubliceerd op 16-9-2022

Wat is PSR-4?

Tijdens het werken met Laravel en Composer kwam ik “psr-4” tegen. Ik was benieuwd wat dat nu precies is. Waarschijnlijk heeft het iets te maken met autoload versie ofzo…? Althans, in die context zie ik het langskomen.

In deze blog neem ik je mee in mijn zoektocht want ik wist voordat ik begon met schrijven ook nog niet wat PSR-4 is. Let op, het is wel een technisch verhaal geworden.

Autoload

Als je wel eens met Laravel en/of Composer werkt ken je de term autoload wel. Dit komt namelijk voor in het composer.json bestand:

"autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        },
	"files": []
}

Hier kwam ik de definitie psr-4 tegen. Verder staat er in dit bestand niet veel spannends waarmee ik de betekenis van PSR-4 zou kunnen afleiden.

Wat is PSR?

PSR betekent PHP Standard Recommendation. Een advies om PHP te gebruiken dus… Interessant.

Na even zoeken kom ik tot de conclusie dat PSR’s lijken op ISO-normen. Waar ISO een internationale standaard is waarvoor je gecertificeerd kunt worden, is PSR meer een internationaal overtuigend advies. PSR is een bewaakte definitie waarin staat hoe je de structuur van bestanden en de structuur van de code moet opzetten. In de meeste gevallen zijn de adviezen gebaseerd op jarenlange ervaring en uitgebreide tests, vandaar dat het advies overtuigend is.

PHP-FIG

De adviezen worden gepubliceerd en bewaakt door PHP Framework Interop Group (PHP-FIG). Deze organisatie is verantwoordelijk voor de kwaliteit van de adviezen en geeft uiteindelijk ook de authenticiteit eraan.

Het doel van PSR-standaarden

Het doel van PSR is om een gemeenschappelijke standaard te creëren voor developers. De standaard zorgt ervoor dat code eenvoudiger te delen is met andere developers. Er wordt namelijk vanuit dezelfde basis gewerkt. Developers kunnen de source code hierdoor sneller lezen en begrijpen. Overigens geldt dit niet alleen voor developers. Er worden voor programma’s zoals Visual Studio Code handige extensies ontwikkeld zodat ze developers helpen tijdens het programmeren. Deze extensies begrijpen de code beter door zich te baseren op een standaard als PSR-4.

PSR-4 code is verder altijd compatibel met andere PSR-4 code. Eenvoudig hergebruiken van code (packages) in meerdere projecten is daardoor geen probleem.

PSR-4

PSR-4 beschrijft hoe bestanden worden ingeladen vanuit verschillende paden in het project. In de specificatie staat ook beschreven hoe bestanden automatisch kunnen worden ingeladen, zonder dat je paden hoeft te definiëren. De autoloader zoekt de map src/ en laadt vervolgens alle PHP-bestanden met de juiste namespace in.

Structuur

De mappenstructuur van een PSR-4-project ziet er minimaal zo uit:

.
+-- src
+-- tests
+-- vendor

PSR-4 is volledig compatibel met PSR-4- en oudere PSR-0-projecten.

PSR-4 in Laravel

In een Laravel-applicatie vind je het bestand composer.json. Hierin staat aangegeven dat de namespace van de applicatie App is: "App\\": "app/“,. Alle code die in deze namespace zit wordt hierna automatisch ingeladen door de autoloader.

Class not found

Class … not found moet je wel een keer tegen zijn gekomen. Het komt voor dat een bepaald nieuw of gewijzigd bestand niet ontdekt wordt door de autoloader. 9 van de 10 keer zit de cache van de autoloader dan in de weg.

In Laravel is er een handig Composer-commando beschikbaar om op zo’n moment te proberen:

composer dump-autoload

Lukt het hiermee niet? Laat het ons weten.

Zijn er nog meer PSR-standaarden?

PSR-4 is de opvolger van PSR-0. Huh? Waar zijn 1, 2 en 3 dan? PSR gaat dus niet per se over autoloading. Wist ik ook niet. PSR-3 gaat bijvoorbeeld over een standaard hoe je logs schrijft. PSR-1 en PSR-2 zijn inmiddels verlopen of verlaten.

Op PHP-FIG staat een lijst met alle PSR-standaarden. Let wel op, sommige standaarden zijn in concept, verouderd of verlaten.

Profielfoto van Dirk Jan

Dirk Jan

developer, eigenaar

Dirk Jan is developer bij en eigenaar van Q2-software.nl. Hij heeft grote passie voor Laravel, front-end en merkidentiteit.

Tags

Snel aan de slag?
Of gewoon een vraag?

stuur een e-mail naar
info@q2-software.nl