Hallo,
Nein, sollte eigentlich schon mit PHP5.3 (was heute als ururalt gilt) verfügbar sein.
- Was ist PSR-4-Autoloader? Eine art function __autoload(...) {...} ?
Wie du richtig rätst hat es mit __autoload bzw. dessem Nachfolger spl_autoload_register zu tun.
__autoload ist übrigens veraltet und sollte durch spl_autoload_register ersetzt werden. Dies kannst du direkt ersetzen, alles, was __autoload kann, kann spl_autoload_register ebenfalls (siehe http://php.net/manual/de/function.spl-autoload-register.php).
Ein PSR-4-Autoloader ist nun ein ganz bestimmter, nämlich derjenige, den sich die sogenannte PHP Framework Interoperability Group ausgedacht hat. Siehe für eine Beispielimplementierung etwa Linkbeschreibung, der Autoloader selber ist beschrieben in http://www.php-fig.org/psr/psr-4/.
Für dich ist es eigentlich "nur" wichtig zu wissen, was der Autoloader macht: er beschreibt eine Zuordnung vom Namen einer Klasse zu der Datei, in der die Klasse zu finden ist. Außerdem erlaubt er es dir, eine Klasse einfach so zu nutzen, ohne die entsprechende "Klassendatei" vorher zu inkludieren (per include/require oder ähnlichem).
Das Mapping von Klassenname zu Dateiname ist in einem der Links oben beschrieben. Daber siehst du dann auch, dass Namespaces auf Verzeichnisse abgebildet werden. Dadurch kannst du sofort deinen Code besser strukturieren und es gibt keine wesentlichen Nachteile.
- Brauch man zwingend composer.json und was ist das
Du brauchst keine composer.json. Diese Datei ist die Konfigurationsdatei von composer, einem Dependency Manager für PHP. Das tolle ist: composer liefert dir einen PSR-4-kompatiblem Autoloader sofort mit. Daher würde ich dir die Nutzung streng ans Herz legen.
Ein Interface ist ein Vertrag darüber, wie ein Objekt nach außen kommuniziert: also welche Methoden das Objekt hat, welche Parameter dafür erforderlich sind und (bei PHP7) welche Rückgabewerte gegeben werden. Durch ein Interface kannst du den Code, der eine Klasse A nutzen will, von der eigentlichen Implementierung entkoppeln (in dem es sich nur auf das Interface von A bezieht) und könntest später entweder ein Objekt von Klasse A nutzen oder vielleicht doch ein Objekt von Klasse B, welches das selbe Interface nutzt. Dadurch kannst du Verhalten von Code ändern, ohne eine Zeile Code anzupassen.
Zu guter Letzt:
Lies dir mal PHP: The right way durch.
Viele Grüße,
Matti