Ich konnte mein Problem mit Tipps von Jakub Zalas Antwort (Option 2) lösen.
Die Idee ist:
- Copy Komponisten
autoload_classmap.php
-autoload_classmap-orig.php
arbeiten.
- Klassen neu anordnen/ändern
composer.json
wie erforderlich.
- Testen Sie neue Autoload gegen orig classmap.
Situation zu vermeiden, wenn die Datei definiert automatisch eine andere Klasse einer Klasse Quelle (d. H. Mehr als eine Klasse in einer Datei definiert ist), sollte jede Klasse in sauberen PHP-Umgebung (eigener php-cli run) geladen werden.
verwendet I 2-Skripte für das:
Klasse automatisch geladen Prüfer (check.php):
<?php
// test if a class, mentioned in autoload_classmap-orig.php at line $num,
// can be autoloaded. Exit status: 0 - ok, 4 - failed to autoload,
// 3 - no more classes in autoload_classmap-orig.php
error_reporting(0);
require_once(__DIR__ . "/vendor/autoload.php");
$num = $argv[1];
$classes = array_keys(include('autoload_classmap-orig.php'));
if (!isset($classes[$num])) {
exit(3);
}
$current_class = $classes[$num];
echo $current_class;
if (!class_exists($current_class)) {
exit(4);
}
exit(0);
Iterator (check.sh)
#!/usr/bin/env bash
# call ./check.php until all classes are checked or max number
# of checks reached.
max=500
num=0
while true ; do
php ./check.php $num
status=$?
case $status in
0) echo " - OK" ;;
3) echo "\nFinished." ; break ;;
4) echo " - CAN NOT BE AUTOLOADED" ;;
*) echo " - UNKNOWN ERROR $status" ;;
esac
num=$(($num + 1))
if [ "$num" -gt "$max" ] ; then
echo "\nMax number of classes reached."
break
fi
done
Danke für einen Hinweis! Wie würde ich alle PHP-Klassen (FQCNs) auflisten? Gibt es ein Werkzeug dafür (ich könnte etwas grep/sed/awk schreiben, aber wenn es ein Werkzeug gibt, wäre es zuverlässiger). – cronfy