Standard PSR-4 wymaga od ciebie ścisłej struktury systemu plików opartej na przestrzeniach nazw. Załóżmy, że masz aplikację w katalogu src
z przestrzenią nazw App
, wtedy wszystkie pod-nazwy przestrzeni będą odzwierciedlały podkatalogi, a nazwy klas będą takie same jak nazwy plików bez rozszerzenia .php
.
{
"autoload": {
"psr-4": { "App\\": "src/" }
}
}
src/
Foo/
Bar.php <---- App\Foo\Bar class
Baz.php <---- App\Baz class
Autoloader wtedy „wie” gdzie szukać klasie pewnej pełnej nazwy, a zatem nie wymaga komendy zrzutu autoload wąchać pliki klas.
Problemy z wydajnością są następnie rozwiązywane za pomocą flagi composer dump-autoload --optimize-autoloader
lub -o
, która generuje mapę klas w podobny sposób, jak w przypadku automatycznego ładowania klas.
Z drugiej strony, classmap autoloading nie wymaga, aby mieć niemal dowolny pewien plik lub strukturę katalogów, będzie to rekursywnie przejść przez .php
i .inc
plików w określonych katalogów i plików i powąchać dla klas w nich .
{
"autoload": {
"classmap": ["src/", "lib/", "Something.php"]
}
}
Klasy te są następnie dodawane do listy (pamięci podręcznej w pliku PHP w katalogu/sprzedawca kompozytor), który jest używany do autoloading.
Każda nowa klasa musi zostać dodana do tej listy za pomocą polecenia composer dump-autoload
.
co z prostymi plikami php bez lekcji? na przykład tylko plik php z wieloma globalnymi funkcjami, jak to dodać? – Toskan
@Toskan patrz https://getcomposer.org/doc/04-schema.md#files – Finwe