PHP 7 hat (dank Facebook) enorm aufgeholt, mit PHP 8 setzt sich dieser positive Trend fort. Es gibt mittlerweile "named parameters", "null coalescing operator" sowie den "nullsafe operator" und sogar einen RFC für Enum-Objekte. Es tut sich also was in der Welt von PHP.
In der Praxis finden diese neuen tollen Features nicht immer Anwendung. Wie bereits geschrieben, haben "damals" viele PHP-Programmierer einfach mal drauflos getippt. Heute stehen die Unternehmen mit einem riesigen Haufen nicht-testbaren Legacy-Code dar, der mit viel Aufwand supported wird (Bugfixing/Features). Heißt, veraltete PHP-Versionen laufen immer noch auf genügend Servern.
Die Code-Qualität in kompilierten Sprachen muss zumindest so gut sein, dass das Ganze noch kompiliert. In PHP läuft "der Scheiß" einfach. Das ist eher negativ zu bewerten.
Alle PHP-eigene Funktionen sind in einem FP-Stil und (oft) auch in einem OOP-Stil verfügbar. Das kann lustig gemischt werden. In der offiziellen Dokumentation finden sich dann spannende Lösungen mit Code-Schnipseln, die gerne mal 10+ Jahre alt sind.
Dazu kommt die Array-Besessenheit der PHP-Community: anstatt mit einfachen DTOs zu arbeiten, werden irgendwelche (verschachtelte) Arrays mit bestimmten Array-Keys verwendet; das trifft auch auf viele große Libraries zu.
Dazu kommt die berühmt berüchtigte PHP/C++ API mit diesen wirren Bezeichnungen wie:
- reset(): gibt das erste Element in einem Array zurück
- strstr(): ersetzt einen template String (z. B. für Translations)
- str_replace: macht das selbe wie oben, benötigt aber zwei individuelle Arrays für den Abgleich
- ...
Die Standard-Library ist ohne Wrapper eigentlich nicht verwendbar: Bei Fehlern werden idR. "null"/"false" zurückgebenen. Heißt, es gibt keine Exceptions bei Fehlern.
Libraries wie
https://github.com/thecodingmachine/safe helfen hier.
PHP hängt im Vergleich mit z. B. Kotlin gefühlt 10 Jahre zurück: Während sich PHPler noch über "Array-Schema-Annotations" die Köpfe heiß reden, sind Dinge wie API-Streams, Generics, Erweiterung von Standardtyps (z.B. für DSL-Features), async oder Data-/Record-Objekte in anderen Sprachen eine Selbstverständlichkeit.
PHP war "damals" geeignet, um eine Homepage (mit Gästebuch!
) zu machen, und in der Praxis gibt es noch viele legacy PHP-Anwendungen die Supported werden. Das war es dann aber auch schon. Man kann "alles" mit PHP machen, aber im Vergleich zu anderen Sprachen und deren Ökosystem ist es halt viel mehr Aufwand.
Java/C# sind auf Dauer besser für die Nerven und die Gehälter sind höher