Modul B · Werkzeuge · Lektion B2
Composer und Packagist: Abhängigkeiten in PHP verwalten
Kaum ein PHP-Projekt kommt heute ohne fremde Bibliotheken aus: eine für E-Mails, eine für PDF-Erzeugung, ein Test-Framework, vielleicht ein ganzes Framework. Früher kopierte man solche Bibliotheken von Hand ins Projekt. Seit 2012 gibt es dafür Composer, den Paketmanager, der die Arbeit in PHP grundlegend verändert hat.
Lernziele
- Du verstehst den Unterschied zwischen composer.json und composer.lock.
- Du kannst Versionsangaben mit ^ und ~ lesen.
- Du richtest Autoloading nach PSR-4 ein.
Composer und Packagist in einem Satz
Composer ist ein Kommandozeilenprogramm, das die Bibliotheken deines Projekts herunterlädt, in passenden Versionen zusammenstellt und automatisch ladbar macht. Packagist ist das zentrale, öffentliche Verzeichnis, aus dem Composer die Pakete standardmäßig bezieht. Entwickelt wurde Composer von Nils Adermann und Jordi Boggiano; die erste Version erschien am 1. März 2012.
Das erste Paket installieren
Angenommen, du willst Datumsangaben komfortabel verarbeiten und entscheidest dich für ein bekanntes Paket:
composer require nesbot/carbonComposer legt daraufhin drei Dinge an: die Datei composer.json, die Datei composer.lock und den Ordner vendor/ mit dem Paket und allem, was es selbst benötigt.
composer.json und composer.lock
Die beiden Dateien werden oft verwechselt, haben aber verschiedene Aufgaben:
- composer.json beschreibt, was du *willst*: welche Pakete in welchen Versionsbereichen. Diese Datei pflegst du selbst oder über
composer require. - composer.lock hält fest, was *tatsächlich installiert* wurde: die exakte Version jedes Pakets, auch der indirekten Abhängigkeiten.
Beide Dateien gehören in die Versionsverwaltung, der Ordner vendor/ dagegen nicht. Wer das Projekt auscheckt, führt composer install aus und bekommt exakt dieselben Versionen wie alle anderen. Erst composer update sucht nach neueren Versionen innerhalb der erlaubten Bereiche und schreibt die Lock-Datei neu.
Versionsangaben lesen
PHP-Pakete folgen in aller Regel der semantischen Versionierung: Major.Minor.Patch. Eine neue Major-Version darf Bestehendes brechen, Minor- und Patch-Versionen nicht. Daraus ergeben sich die gängigen Schreibweisen in der composer.json:
| Angabe | Bedeutung | Erlaubt z. B. |
|---|---|---|
^3.2 | ab 3.2, aber unter 4.0 | 3.2.0 bis 3.99 |
~3.2.1 | ab 3.2.1, aber unter 3.3 | 3.2.1 bis 3.2.99 |
3.2.* | jede Patch-Version von 3.2 | 3.2.0 bis 3.2.99 |
>=3.2 <3.5 | expliziter Bereich | 3.2.0 bis 3.4.99 |
Das Dach-Zeichen ^ ist der empfohlene Normalfall. Auch die PHP-Version selbst lässt sich als Anforderung eintragen, etwa "php": "^8.3".
Autoloading nach PSR-4
Die zweite große Leistung von Composer ist das Autoloading. Statt jede Klassendatei mit require einzubinden, lädt PHP Klassen automatisch, sobald sie benutzt werden. Grundlage ist der Standard PSR-4 der PHP-FIG, einer Arbeitsgruppe von Projekten, die gemeinsame Schnittstellen und Konventionen vereinbart:
{ "autoload": { "psr-4": { "Schule\\Stundenplan\\": "src/" } }}Damit liegt die Klasse Schule\Stundenplan\Fach in der Datei src/Fach.php. Nach composer dump-autoload genügt eine einzige Zeile am Anfang deines Einstiegsskripts:
<?phprequire __DIR__ . '/vendor/autoload.php';class="va">$fach = new Schule\Stundenplan\Fach('Informatik');Sicherheit und Pflege
Jedes Paket ist fremder Code, der in deiner Anwendung mit allen Rechten läuft. Deshalb lohnt ein kurzer Blick vor der Installation: Wird das Paket gepflegt? Wie viele Projekte nutzen es? Gibt es bekannte Sicherheitslücken? Der Befehl composer audit prüft die installierten Versionen gegen eine Datenbank bekannter Schwachstellen und gehört in jede regelmäßige Wartung.
Mit composer outdated siehst du, welche Pakete neuere Versionen haben. Plane Updates in kleinen Schritten, am besten zusammen mit automatischen Tests, wie sie die Lektion Tests und Codequalität beschreibt.
Wo Composer überall steckt
Moderne Frameworks wie Symfony und Laravel sind selbst als Composer-Pakete organisiert, ebenso Test- und Analysewerkzeuge. Selbst in Content-Management-Systemen wie TYPO3 oder Drupal ist die Installation über Composer der empfohlene Weg. Einen Überblick über diese Systeme gibt Frameworks und CMS. Die Dokumentation findest du auf getcomposer.org.
Selbstcheck
Welche Datei hält die exakt installierten Versionen fest?
Die composer.lock.
Was erlaubt die Angabe ^2.4?
Alle Versionen ab 2.4.0 bis unter 3.0.0.
Welcher Befehl prüft installierte Pakete auf bekannte Sicherheitslücken?
composer audit