Mit PHP 8.2 erstellst du eine PDF/A-3-Datei am praktikabelsten mit TCPDF; mPDF kann zwar PDF/A, ist dafür aber deutlich weniger klar dokumentiert und selbst die eigene Doku bezeichnet die Bibliot...
PHP-Fehler: Wie mache ich die Klasse Children in Participant.php verfügbar?
Antwort vom**Der Fehler bedeutet fast immer: `Participant.php` kennt die Klasse `Children` weder per Namespace noch per Autoload noch per `require`. Du musst `Children` entweder korrekt importieren oder die Datei laden lassen – nur der Dateiname im Ordner reicht nicht.** ## Was konkret fehlt In Zeile 169 steht vermutlich so etwas wie: ```php new Children() ``` oder ```php Children::... ``` PHP sucht dann nach einer Klasse mit genau diesem Namen. Wenn sie nicht bereits geladen ist, kommt `Class "Children" not found`. Entscheidend ist also nicht `Participant.php verfügbar machen`, sondern **`Children` für diesen Scope auflösbar machen**. Das ist der eigentliche Unterschied. ## Die 3 typischen Lösungen ### 1. Ohne Namespace: Datei manuell einbinden Wenn `Children.php` **keinen Namespace** hat, muss die Datei vor der Verwendung geladen werden: ```php require_once __DIR__ . '/Children.php'; ``` Dann funktioniert in `Participant.php`: ```php $child = new Children(); ``` Das ist die einfachste Lösung, aber nur sauber bei kleinen Projekten. ### 2. Mit Namespace: Klasse importieren Wenn in `Children.php` z. B. steht: ```php namespace App\Models; class Children { } ``` dann musst du in `Participant.php` oben importieren: ```php use App\Models\Children; ``` Danach geht: ```php $child = new Children(); ``` Ohne `use` müsstest du den vollständigen Namen schreiben: ```php $child = new \App\Models\Children(); ``` Laut den PHP-Regeln zur Namensauflösung wird ein nicht voll qualifizierter Klassenname sonst im aktuellen Namespace gesucht. ([php.net](https://www.php.net/manual/it/language.namespaces.rules.php)) ### 3. Autoloading korrekt einrichten Die saubere Lösung ist Autoloading, z. B. per SPL/Composer. PHP kann Klassen dann automatisch laden, wenn Namespace und Dateipfad zusammenpassen. `spl_autoload_register()` ist genau dafür gedacht. ([php.net](https://www.php.net/manual/en/function.spl-autoload-register.php)) Ein einfaches Beispiel: ```php spl_autoload_register(function ($class) { require_once __DIR__ . '/' . str_replace('\\', '/', $class) . '.php'; }); ``` Dann muss die Struktur konsistent sein, z. B.: ```php App\Models\Children ``` liegt in: ```php /App/Models/Children.php ``` ## Was du zuerst prüfen solltest Der häufigste Fehler ist einer von diesen vier Punkten: - Die Datei heißt `Children.php`, aber die Klasse darin heißt anders. - Die Klasse hat einen Namespace, du verwendest aber nur `Children`. - Die Datei wird nie eingebunden. - Autoloading ist eingerichtet, aber Pfad und Namespace passen nicht zusammen. Ein schneller Test ist: ```php var_dump(class_exists('Children')); ``` Bei Namespaces musst du den vollständigen Namen prüfen, weil `class_exists()` mit dem echten Klassennamen arbeitet. ([php.net](https://www.php.net/manual/en/function.class-exists.php)) ## Klare Empfehlung Wenn dein Projekt mehr als ein paar Dateien hat, **nutze keine verstreuten `require_once`-Aufrufe**, sondern ein sauberes Namespace- plus Autoloading-Konzept. Das verhindert genau solche Fehler dauerhaft. Minimal gesagt: - **ohne Namespace** → `require_once` vor der Nutzung - **mit Namespace** → `use ...\Children;` oder `new \... \Children()` - **sauber für Projekte** → Autoloading einrichten ## Wahrscheinlich richtige Lösung für deinen Fall Wenn `Participant.php` und `Children.php` beide im Ordner `classes` liegen und **keine Namespaces** verwenden, dann reicht meist oben in `Participant.php`: ```php require_once __DIR__ . '/Children.php'; ``` Wenn `Children.php` einen Namespace enthält, poste den Kopf von `Children.php` und die ersten Zeilen von `Participant.php` – dann ist die exakte Lösung in 1 Minute klar.