![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 53 Pomógł: 5 Dołączył: 4.12.2013 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam pytanie dosyć teoretyczne, nie wiem czy to brak znajomości angielskiego czy też faktycznie nie ma o tym słowa, stąd wolę dopytać. W php mamy domyśle klasy np. gatunku /Exception, /DateTime itd. Według PSR i standardów symfony w kodzie te klasy także powinny być wrzucone w use czy też nie? v1
czy też v2
Jeżeli ja dobrze zrozumiałem to powinniśmy trzymać się v1, jednakże wolę dopytać. W PSR-1 mamy: Cytat Namespaces and classes MUST follow an “autoloading” PSR: [PSR-0, PSR-4]. W Symfony standards mamy: Cytat Use namespaces for all classes; Tylko nie mam pewności czy to faktycznie dotyczy użycia use dla klas z global namespace. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Zacznijmy od tego, że te klasy w globalnej przestrzeni to nie /Exception i /DateTime, tylko \Exception i \DateTime. Znak slash nie występuje w temacie przestrzeni nazw. Tylko i wyłącznie backslash. Niby niuans, a jednak bardzo ważny.
A odpowiadając na Twoje pytanie, zarówno wersja pierwsza, jak i druga są prawidłowe. Standardy PSR nie wskazują czy używać use czy nie. One tylko mówią jaka powinna być przestrzeń nazw względem położenia w systemie plików. Cytat Use namespaces for all classes; Czyli: Używaj przestrzeni nazw dla wszystkich klas. Nie ma to nic do rzeczy z użyciem lub brakiem użycia use, chociaż rozumiem Twoje zwątpienie. Ta zasada mówi tylko tyle, że każda z Twoich własnych klas powinna leżeć w jakiejś przestrzeni nazw, czyli nie powinieneś deklarować klasy w ten sposób:
Ale już ta klasa jest w porządku:
Oczywiście najlepiej, gdy sama przestrzeń będzie też w zgodzie ze standardami Symfony, jednak powyższy Cat spełnia już te podstawowe wymagania. Po prostu nie zaśmiecasz globalnej przestrzeni nazw. Podsumowując: używanie przestrzeni nazw to przyłączenie danej klasy do przestrzeni nazw, a nie uwzględnienie innych klas w sekcji use. To ostatnie służy tylko temu, by łatwiej się odnosić do tych innych klas. Żaden standard nie stoi na przeszkodzie, byś odwołania do wszystkich innych klas podawał z ich pełną przestrzenią nazw. Byłoby to jednak uciążliwe. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 09:15 |