Autoloader voor eigen classes: Apart of via Composer

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- Ariën  -
Beheerder

- Ariën -

06/12/2025 14:15:33
Quote Anchor link
Momenteel ben ik lekker bezig met mijn CMS-project, en ik gebruik momenteel een hoop classes, en ook diverse classes en packages via Composer. Voor alle Composer-packages gebruik ik de standaard Autoloader die Composer aanmaakt, maar mijn eigen classes gebruiken nog geen autoloader. Nu wil ik deze wel gebruiken....

Nu ben ik benieuwd wat jullie gebruiken of adviseren? Een aparte Autoloader voor je eigen classes, interfaces etc.., of ook deze afhankelijk maken van de Composer autoloader. De weg om alles via Composer te doen klinkt verleidelijk, en het meest logisch, maar ik wil niet straks tegen drempels aanlopen.

Wat is jullie advies?

Ik heb dit ook even bij de buren van HelpMij.nl gevraagd. Je weet maar nooit!
Gewijzigd op 06/12/2025 14:18:29 door - Ariën -
 
PHP hulp

PHP hulp

27/05/2026 14:05:33
 
- Ariën  -
Beheerder

- Ariën -

07/12/2025 23:51:41
Quote Anchor link
Ik heb even de voor- en nadelen naast elkaar gelegd, en bij Composer moet je dan, bij gebruik van hun autoloader, steeds na het toevoegen van een class 'composer dump-autoload' uitvoeren. Ik kan het wel in een workflow zetten, maar voor nu lijkt een losse autoloader wat beter.

Maar wederom ben ik wel benieuwd naar jullie ervaringen en beargumenteerde keuze.
Gewijzigd op 07/12/2025 23:52:12 door - Ariën -
 
Ivo P

Ivo P

08/12/2025 10:46:04
Quote Anchor link
als je een logische opbouw in de naamgeving en evt de namespaces gebruikt, zou dat toch moeten kunnen zonder elke keer composer aan te passen.

Voorbeeld: ik heb voor een project een aantal helper-classes.
Die staan in een map /aap/noot/Helpers/

in composer.json staat

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
  "autoload": {
    "psr-4": {
      "myProject\\FooBar\\Helpers\\": "aap/noot/Helpers/"
    }
  },



als ik nu ergens in mijn code verwijs naar

\myProject\FooBar\Helpers\algemeen::test();

dan gaat de autoloader opzoek naar een file algemeen.php in die map aap/noot/Helpers

En als ik daar een bijzonder.php plaats, kan ik direct een zelfde soort aanroep in mijn scripts gebruiken, zonder iets met composer of zijn autoloader te doen.

(wel dezelfde namespace gebruiken, en eventueel op hoofdletters letten in je filenames)
 
- Ariën  -
Beheerder

- Ariën -

08/12/2025 11:01:57
Quote Anchor link
Ik ga er eens mee experimenteren. Zou wel mooi zijn dat het ook zonder composer dump-autoload kan
 
Ivo P

Ivo P

08/12/2025 12:16:48
Quote Anchor link
en uiteraard gebruik je dezelfde filename als de name van de class die (alleen) in die file staat.
Maar dat spreekt zo voor zich voor mij, dat ik dat even vergat te melden

Toevoeging op 08/12/2025 12:16:50:

en uiteraard gebruik je dezelfde filename als de name van de class die (alleen) in die file staat.
Maar dat spreekt zo voor zich voor mij, dat ik dat even vergat te melden
 
Ward van der Put
Moderator

Ward van der Put

08/12/2025 15:33:38
Quote Anchor link
Als je je inderdaad aan de conventies van PSR-4 “Autoloading Standard” houdt (voor de directorystructuur en de namen van namespaces, classes en bestanden), kun je bestanden automatisch laden met élke autoloader die compatibel is met PSR-4. Waaronder de autoloader van Composer.

https://www.php-fig.org/psr/psr-4/

Inspiratie voor je eigen PSR-4-compatibele autoloader vind je hier:

https://www.php-fig.org/psr/psr-4/examples/
 
Draven Godfrey

Draven Godfrey

19/05/2026 09:04:03
Quote Anchor link
Ik zou alles via de Composer autoloader laten lopen en gewoon PSR-4 aanhouden. Zolang je namespace structuur klopt hoef je geen aparte autoloader te bouwen en hoef je alleen dump-autoload te doen als je composer.json wijzigt, niet bij elke nieuwe class.
 
- Ariën  -
Beheerder

- Ariën -

19/05/2026 11:27:45
Quote Anchor link
Mooie kick! Maar om een lang verhaal kort te maken. Ik heb inderdaad gekozen voor de autoloader van composer.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.