PHP Composer: Der ultimative Guide 2025
Composer meistern: Von Dependency Management über Autoloading bis zu Scripts und Versioning. Das unverzichtbare Tool für moderne PHP-Entwicklung – mit praktischen Beispielen, Best Practices und Laravel-Integration.
📚 Inhaltsverzeichnis
Composer ist das Standard-Tool für Dependency Management in PHP. Es revolutionierte die PHP-Entwicklung und ermöglicht es, externe Bibliotheken einfach zu integrieren, Autoloading zu konfigurieren und komplexe Projekte zu verwalten. Ohne Composer wären moderne Frameworks wie Laravel, Symfony oder Doctrine undenkbar.
1. Was ist Composer?
Composer ist ein Dependency Manager für PHP, ähnlich wie npm für Node.js oder pip für Python. Es löst automatisch Abhängigkeiten auf, lädt Pakete herunter und konfiguriert Autoloading.
🎯 Hauptfunktionen von Composer
- • Dependency Management: Externe Pakete verwalten
- • Autoloading: Automatisches Laden von Klassen (PSR-4)
- • Version Resolution: Kompatible Versionen finden
- • Scripts: Build-Prozesse und Automation
- • Packagist Integration: Zugriff auf 350.000+ Pakete
2. Installation & Setup
🔧 Composer installieren
Composer kann auf verschiedene Weise installiert werden. Die einfachste Methode ist der Download des Installers von der offiziellen Website.
🪟 Windows
# Composer-Setup.exe herunterladen
# Von https://getcomposer.org/download/
🐧 Linux/macOS
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
✅ Installation prüfen
composer --version
# Composer version 2.6.5 2023-10-06 10:11:52
3. composer.json verstehen
Die composer.json
ist das Herzstück jedes Composer-Projekts. Sie definiert Abhängigkeiten, Autoloading-Regeln und Projekt-Metadaten.
📄 Grundstruktur einer composer.json
{
"name": "vendor/project-name",
"description": "Eine kurze Projektbeschreibung",
"type": "project",
"license": "MIT",
"authors": [
{
"name": "Dein Name",
"email": "ihre.email@example.com"
}
],
"require": {
"php": ">=8.1",
"monolog/monolog": "^3.0"
},
"require-dev": {
"phpunit/phpunit": "^10.0"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
📋 Wichtige Felder
- • name: Eindeutiger Paketname
- • require: Produktions-Dependencies
- • require-dev: Entwicklungs-Dependencies
- • autoload: Autoloading-Konfiguration
⚡ Composer-Befehle
- •
composer init
- Neue composer.json - •
composer install
- Dependencies installieren - •
composer update
- Dependencies aktualisieren - •
composer dump-autoload
- Autoloader neu generieren
4. Dependencies verwalten
Composer macht es einfach, externe Bibliotheken zu installieren und zu verwalten. Alle Pakete werden von Packagist.org heruntergeladen.
📦 Pakete installieren
# Neues Paket hinzufügen
composer require monolog/monolog
# Entwicklungs-Dependency hinzufügen
composer require --dev phpunit/phpunit
# Spezifische Version installieren
composer require "doctrine/orm:^2.14"
# Paket entfernen
composer remove monolog/monolog
🔄 Version Constraints
Constraint | Bedeutung | Beispiel |
---|---|---|
^2.0 | Kompatible Version (>=2.0.0, <3.0.0) | 2.0.0, 2.5.1, 2.9.9 |
~2.1 | Ungefähr gleich (>=2.1.0, <2.2.0) | 2.1.0, 2.1.5 |
>=2.0 | Mindestens Version 2.0 | 2.0.0, 3.0.0, 4.1.2 |
2.1.* | Wildcard (>=2.1.0, <2.2.0) | 2.1.0, 2.1.9 |
5. Autoloading & PSR-4
Autoloading eliminiert die Notwendigkeit, Klassen manuell mit require
oder include
zu laden. PSR-4 ist der moderne Standard für Autoloading in PHP.
🗂️ PSR-4 Autoloading konfigurieren
// composer.json
{
"autoload": {
"psr-4": {
"App\\": "src/",
"Tests\\": "tests/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
}
}
📁 Verzeichnisstruktur
project/
├── composer.json
├── vendor/
│ └── autoload.php
└── src/
├── Models/
│ └── User.php # App\Models\User
├── Controllers/
│ └── UserController.php # App\Controllers\UserController
└── Services/
└── EmailService.php # App\Services\EmailService
🔧 Autoloader verwenden
<?php
// Autoloader einbinden
require_once 'vendor/autoload.php';
// Klassen automatisch laden
use App\Models\User;
use App\Services\EmailService;
$user = new User();
$emailService = new EmailService();
⚡ Autoloader regenerieren
Nach Änderungen an der Autoload-Konfiguration:
composer dump-autoload
6. Scripts & Automation
Composer Scripts ermöglichen es, benutzerdefinierte Befehle zu definieren und Build-Prozesse zu automatisieren.
⚙️ Scripts definieren
// composer.json
{
"scripts": {
"test": "phpunit",
"test-coverage": "phpunit --coverage-html coverage",
"cs-fix": "php-cs-fixer fix",
"analyse": "phpstan analyse",
"build": [
"@cs-fix",
"@analyse",
"@test"
]
}
}
🚀 Scripts ausführen
# Einzelne Scripts
composer test
composer cs-fix
composer analyse
# Zusammengesetztes Script
composer build
🔄 Event Hooks
{
"scripts": {
"pre-install-cmd": "echo 'Installing dependencies...'",
"post-install-cmd": [
"@php artisan key:generate --ansi",
"@php artisan config:cache"
],
"post-update-cmd": "@php artisan optimize"
}
}
7. Semantic Versioning
Semantic Versioning (SemVer) ist ein Versionierungsschema, das Composer verwendet, um kompatible Updates zu bestimmen. Das Format ist: MAJOR.MINOR.PATCH
🔴 MAJOR (1.0.0)
Breaking Changes - Nicht rückwärtskompatible API-Änderungen
🟡 MINOR (0.1.0)
Neue Features - Rückwärtskompatible Funktionalität
🟢 PATCH (0.0.1)
Bug Fixes - Rückwärtskompatible Fehlerbehebungen
📊 Version Constraints Beispiele
# Caret Constraint (empfohlen)
"^2.1.3" # >=2.1.3, <3.0.0
# Tilde Constraint
"~2.1.3" # >=2.1.3, <2.2.0
# Exakte Version
"2.1.3" # Genau 2.1.3
# Bereich
">=2.1.0 <2.3.0" # Von 2.1.0 bis unter 2.3.0
8. Best Practices
✅ Do's
- • Verwende
composer.lock
in Git - • Nutze Caret Constraints (^)
- • Trenne Production- und Dev-Dependencies
- • Verwende PSR-4 Autoloading
- • Definiere Scripts für häufige Aufgaben
- • Halte Dependencies aktuell
- • Verwende
--no-dev
in Production
❌ Don'ts
- • Committe niemals
vendor/
Ordner - • Verwende keine exakten Versionen ohne Grund
- • Ignoriere nicht Sicherheitsupdates
- • Verwende keine veralteten Pakete
- • Mische nicht verschiedene Autoloading-Standards
- • Führe
composer update
nicht blind aus
🚀 Performance-Tipps
- • Optimierter Autoloader:
composer dump-autoload --optimize
- • Classmap Authoritative:
composer dump-autoload --classmap-authoritative
- • APCu Cache:
composer dump-autoload --apcu
- • Parallel Downloads:
composer config --global repo.packagist composer https://packagist.org
🔧 Nützliche Composer-Befehle
Befehl | Beschreibung |
---|---|
composer show | Alle installierten Pakete anzeigen |
composer outdated | Veraltete Pakete finden |
composer validate | composer.json validieren |
composer why package/name | Warum ist ein Paket installiert? |
composer fund | Funding-Informationen anzeigen |