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.

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

ConstraintBedeutungBeispiel
^2.0Kompatible Version (>=2.0.0, <3.0.0)2.0.0, 2.5.1, 2.9.9
~2.1Ungefähr gleich (>=2.1.0, <2.2.0)2.1.0, 2.1.5
>=2.0Mindestens Version 2.02.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

BefehlBeschreibung
composer showAlle installierten Pakete anzeigen
composer outdatedVeraltete Pakete finden
composer validatecomposer.json validieren
composer why package/nameWarum ist ein Paket installiert?
composer fundFunding-Informationen anzeigen