Eines der häufigsten Probleme ist: SPL_AUTOLOAD_register wird nicht korrekt bezeichnet oder an anderer Stelle überschrieben. Wenn beispielsweise mehrere Autoloader im Bestellfehler registriert sind, werden einige Klassen möglicherweise nicht gefunden.
<?php
spl_autoload_register(function ($class) {
include __DIR__ . '/classes/' . $class . '.php';
});
Stellen Sie sicher, dass diese anonyme Funktion registriert und ausgeführt wurde. Sie können die Liste der derzeit registrierten Autoloadfunktionen über spl_autoload_functions () überprüfen.
Bei Verwendung des Namespace enthält der Klassenname eine Backslash (\), die in der Dateipfadauflösung nicht korrekt ersetzt wird, wodurch die Datei gefunden wird.
<?php
spl_autoload_register(function ($class) {
$path = __DIR__ . '/src/' . str_replace('\\', '/', $class) . '.php';
require $path;
});
Hinweis: Str_Replace ('\\', '/', $ Class) muss verwendet werden, um den Namespace in einen Verzeichnispfad umzuwandeln.
In fallempfindlichen Dateisystemen wie Linux muss der Fall des Klassennamens genau mit dem Dateinamen übereinstimmen. Wenn Sie sich unter Windows (Fall-unempfindlich) entwickeln und es unter Linux bereitstellen, können Sie die Klasse nicht gefunden.
Es wird empfohlen, die PSR-4-Benennungsspezifikation einheitlich zu verwenden und die automatische Belastung der Komponisten zu verwenden, um solche Probleme zu vermeiden.
Ein weiterer häufiger Grund ist ein Pfadfehler oder ein Root -Verzeichnisfehler. Beispielsweise kann die folgende Methode des Pfadspleißs nach Änderungen der Projektstruktur fehlschlagen:
require 'classes/' . $class . '.php';
Ein robusterer Weg ist, absolute Pfade zu verwenden:
require __DIR__ . '/classes/' . $class . '.php';
Oder verwenden Sie RealPath (), um zu überprüfen, ob der Pfad existiert.
Selbst wenn die automatische Ladelogik korrekt ist, kann der automatische Lader die Klasse natürlich nicht laden, wenn die Zielklassendatei selbst nicht vorhanden ist oder nicht korrekt erstellt wird. Zu diesem Zeitpunkt ist es sehr hilfreich, auf ähnliche Weise zu debuggen:
<?php
spl_autoload_register(function ($class) {
$file = __DIR__ . '/classes/' . $class . '.php';
if (!file_exists($file)) {
error_log("Autoload failed: $file not found");
}
require $file;
});
Wenn Sie das automatische Laden über Komponist (empfohlene Methode) verwalten, müssen Sie Folgendes sicherstellen:
Der Komponist-Dump-Autoload wurde ausgeführt, wodurch der Anbieter/autoload.php auf dem neuesten Stand ist.
erfordern 'Anbieter/autoload.php'; wird richtig genannt und der Pfad ist korrekt.
<?php
require __DIR__ . '/vendor/autoload.php';
Sie können überprüfen, ob die Datei korrekt bereitgestellt wird, indem Sie auf die https://gitbox.net/vendor/autoload.php zugreifen.