Konwencja nazewnictwa PSR-0

Z PHPEdia.pl
Skocz do: nawigacji, wyszukiwania

Konwencja nazewnictwa PSR-0 jest zbiorem podstawowych zasad nazewnictwa klas w PHP 5.3, które umożliwiają bezproblemową współpracę wielu różnych autoloaderów, a w szczególności - obsługę wielu różnych bibliotek przy pomocy jednej, uniwersalnej implementacji autoloadera. Za jej utworzenie odpowiada Grupa Standaryzacyjna PHP zawiązana przez zespoły programistyczne rozwijające czołowe projekty PHP. Konwencja została opublikowana po raz pierwszy w listopadzie 2009 roku i jest obecnie wdrażana przez coraz większą liczbę projektów.

Zasady tłumaczenia nazw

Konwencja zakłada, że każdy plik PHP zawiera co najwyżej jedną klasę lub interfejs, a na podstawie jej nazwy oraz przestrzeni nazw możemy łatwo zbudować odpowiednią ścieżkę do pliku. Konwencja zdefiniowana jest dla PHP 5.3 i zakłada wykorzystanie przestrzeni nazw.

  • Struktura w pełni kwalifikowanej nazwy klasy ma następującą budowę: \<Nazwa dostawcy>\(<Przestrzeń nazw>\)*<Nazwa klasy>
  • Każda przestrzeń nazw musi być przyporządkowana do pewnej przestrzeni nazw najwyższego poziomu zwanej nazwą dostawcy.
  • Nie ma ograniczeń na liczbę podprzestrzeni.
  • Podczas tłumaczenia nazwy na ścieżkę do pliku każdy separator przestrzeni nazw \ jest zamieniany na wartość stałej DIRECTORY_SEPARATOR.
  • Podczas tłumaczenia nazwy na ścieżkę do pliku każdy symbol podkreślenia _ wchodzący w skład Nazwy Klasy jest zamieniany na wartość stałej DIRECTORY_SEPARATOR. Podkreślenie nie jest przetwarzane, jeśli wchodzi w skład nazwy przestrzeni nazw.
  • Podczas tłumaczenia nazwy na ścieżkę do pliku doklejamy na końcu rozszerzenie .php
  • Nie ma żadnych ograniczeń na użycie dużych i małych liter alfabetu zarówno w nazwach przestrzeni, jak i nazwach klas.

Przykłady:

  • \Doctrine\Common\IsolatedClassLoader => /sciezka/do/zrodel/Doctrine/Common/IsolatedClassLoader.php
  • \Symfony\Core\Request => /sciezka/do/zrodel/Symfony/Core/Request.php
  • \dostawca\przestrzen\Nazwa_Klasy => /sciezka/do/zrodel/dostawca/przestrzen/Nazwa/Klasy.php
  • \dostawca\przestrzen_nazw\Nazwa_Klasy => /sciezka/do/zrodel/dostawca/przestrzen_nazw/Nazwa/Klasy.php

Czego konwencja nie precyzuje?

Konwencja koncentruje się jedynie na rzeczach niezbędnych do zapewnienia prawidłowej współpracy różnych automatycznych ładowarek klas. Nie mówi natomiast nic o tym, jak np. powinna nazywać się klasa abstrakcyjna, jak powinien nazywać się interfejs lub czy nazwy klas powinny zaczynać się z dużych liter. Każdy projekt ma tutaj pozostawioną swobodę w doborze tego typu zasad.

W praktyce powszechnie stosuje się regułę, w myśl której nazwy klas i przestrzeni nazw zaczynają się z dużych liter, np. Request, LoaderInterface.

Dlaczego używać?

Projekty wykorzystujące konwencję PSR-0 mogą być bardzo łatwo łączone ze sobą, a co ważniejsze - bez względu na to, ile ich użyjemy, możemy je ładować przy pomocy uniwersalnego autoloadera. De facto nawet nie musimy pisać takowego, lecz po prostu wykorzystać jedną z wielu gotowych implementacji.

Projekty kompatybilne z PSR-0

Automatyczne ładowarki obsługujące PSR-0

Ładowarka Doctrine 2 nie jest zgodna z PSR-0, ponieważ nie obsługuje prawidłowo znaków podkreślenia.

Zobacz także