2016-07-31 10 views
8

Co się tyczy Laravel, dostałem pytanie o autoloading kompozytora, tj. Różnicę między autoloadą "psr-4" i "classmap".Różnica między automatycznym ładowaniem PSR-4 a mapą klas?

1 różnica, o której wiem, że PSR-4 nie wymaga powtórnego dumpautoload dla każdej zmiany lub dodania nowych plików, podczas gdy classmap potrzebuje dumpautoload dla każdej zmiany istniejących plików zawierających klasy lub dodanie nowego pliku w określonym katalogu.

Odpowiedz

21

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.

+0

co z prostymi plikami php bez lekcji? na przykład tylko plik php z wieloma globalnymi funkcjami, jak to dodać? – Toskan

+1

@Toskan patrz https://getcomposer.org/doc/04-schema.md#files – Finwe

Powiązane problemy