Die übliche Reaktion auf ein PHP-Projekt ohne composer.json ist Misstrauen. Zu Recht – meistens steht dahinter jemand, der Paketverwaltung nicht kennt. Hier war es eine Entscheidung, und sie hat einen Preis, den ich gleich nenne.
Was eine Abhängigkeit tatsächlich kostet
Ein Paket einzubinden dauert eine Minute. Danach beginnt eine Verpflichtung, die niemand mitkalkuliert:
- Sicherheitsmeldungen verfolgen, auch für die Pakete, die Ihr Paket mitbringt
- Bei Hauptversionswechseln den eigenen Code anpassen
- PHP-Versionswechsel überstehen, bei denen ein Paket nicht mitzieht
- Damit rechnen, dass ein Projekt aufgegeben wird
Bei einem Portal, das drei Jahre laufen soll und zwischendurch niemanden beschäftigt, ist das der teuerste Posten. Nicht die Entwicklung – die Pflege.
Die Rechnung im konkreten Fall
Was hätten Pakete hier beigetragen? Eine Template-Engine – bei reinem PHP mit Ausgabepufferung nicht nötig. Ein Router – ein statischer Generator hat keine Routen, er schreibt Dateien. Ein ORM – für zwölf Tabellen mit vorbereiteten Anweisungen ein Umweg. Ein Markdown-Parser – die Inhalte sind HTML.
Bliebe Bequemlichkeit. Die ist echt, aber sie rechtfertigt keine Kette von vierzig transitiven Abhängigkeiten für ein Programm, das im Kern Zeichenketten zusammensetzt und in Dateien schreibt.
Was das erlaubt
Das Ergebnis läuft auf einfachem Webspace, bei dem es keine Kommandozeile gibt. Es lässt sich per FTP einspielen. Es hat keinen Bauschritt, also auch keinen, der irgendwann nicht mehr durchläuft. Und es gibt nichts, was in zwei Jahren ein Sicherheitsupdate braucht, das jemand einspielen müsste.
Für Projekte, die von einer Person nebenher betrieben werden, ist das der Unterschied zwischen „läuft noch" und „müsste man mal migrieren".
Der Preis, ehrlich
Mehr eigener Code. Was ein Paket erledigt hätte, steht hier selbst geschrieben – und muss selbst geprüft werden. Bei Datumsformaten, Zeichenkodierung und HTML-Maskierung ist das genau die Stelle, an der Eigenbau schiefgeht.
Keine fremden Augen. Ein verbreitetes Paket hat tausende Nutzer, die Fehler finden. Eigener Code hat einen.
Kein Ökosystem. Wer eine Volltextsuche über hunderttausend Dokumente braucht, schreibt sie nicht selbst. Dann ist ein anderes Fundament richtig.
Wo die Grenze liegt
Der Verzicht trägt, solange die Aufgabe klar umrissen bleibt: Daten lesen, HTML erzeugen, Dateien schreiben. Sobald Bezahlvorgänge, Benutzerkonten oder Verschlüsselung dazukommen, endet er. Kryptografie selbst zu schreiben ist kein Sparen, sondern Leichtsinn – dafür bringt PHP fertige Funktionen mit, und die werden hier auch benutzt.
Die Frage ist nie „Paket oder nicht", sondern: Löst es ein Problem, das ich sonst schlechter löse? Bei Passwort-Hashes lautet die Antwort ja. Bei einer Template-Engine für zwölf Vorlagen nein.