Sie können diese Dateien umbenennen, um sie kompatibel zu PSR-4 zu machen (unwahrscheinlich, weil das die Verwendung von Namespaces erfordert - in 10 Jahre altem Code?) Oder PSR-0. Außerdem müssen Sie das explizite Laden dieser Dateien über include
, include_once
, require
oder require_once
entfernen, da sich die Dateinamen geändert haben.
PHP wird diese Klassen automatisch nach ihrem Klassennamen laden. Dies wird möglicherweise zu Problemen führen, wenn die Groß-/Kleinschreibung im Klassennamen nicht überall beachtet wird. Beispiel:
class UpperCase {}
$a = new upperCase();
Das automatische Laden würde versuchen, eine Datei mit Endung upperCase.php
zu finden, die das PSR-0 nicht übereinstimmen erforderlich UpperCase.php
, so wird der Code fehlschlagen.Dies wird jedoch arbeiten, um die Situation zu machen nicht besser:
class UpperCase {}
$b = new UpperCase();
$a = new upperCase();
Der Grund dafür ist, dass PHP-Klassennamen Groß- und Kleinschreibung behandelt, so dass, sobald eine Klasse geladen wird, kann man jeden Case in seinem Namen verwenden kann. Es ist nur das erste Vorkommen in Ihrem Code-Pfad, das übereinstimmen muss. Das Problem ist, wo das wirklich ist, also muss es überall richtig sein.
Ja, die Classmap-Funktion ist der einfachere Weg. Aber Sie möchten immer noch include/require
Anrufe entfernen, um die Leistung ein wenig zu optimieren, so müssen Sie den Code trotzdem berühren. Und trotz seines Alters muss es beibehalten werden - warum also nicht vollständig und auf einen bekannten Autoloading-Standard umstellen. Es wird Ihnen auf lange Sicht helfen, wenn Sie PSR-0/4-kompatible Klassen und diesen alten Code parallel verwalten müssen.
wenn ich Autoload im composer.json von Legacy-Bibliotheken es – shobekhan
funktioniert hinzufügen, aber wenn ich in composer.json von meinem Projekt hinzufügen es funktioniert nicht „Repositorys“: [{ „type“: „Paket“ , "Paket": { "name": "shoaib/test", "type": "Paket", "Version": "Master", "Quelle": { "url": „https: //github.com/shobekhan/test.git ", " typ ":" git ", " referenz ":" master " }, " autoload ": { "classmap": ["Cache /"] } } ] – shobekhan
Sie müssen den Abschnitt "autoload" in composer.json Ihres shoaib/test-Pakets einfügen. Alternativ, wenn Sie keine Kontrolle über das Paket haben, können Sie versuchen, es auf der obersten Ebene von composer.json zu definieren, aber ich bin mir nicht sicher, ob das funktionieren wird. –