Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][inne]Symfony standard + PSR a namespace i use dla globalnych klas, Zapytanie odnośnie interpretacji
Geniesis
post
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
  1. namespace x;
  2.  
  3. use Exception;
  4.  
  5. class y
  6. {
  7. function z()
  8. {
  9. new Exception();
  10. }
  11. }

czy też v2
  1. namespace x;
  2.  
  3. class y
  4. {
  5. function z()
  6. {
  7. new \Exception();
  8. }
  9. }


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.
Go to the top of the page
+Quote Post
SmokAnalog
post
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:

  1. class Cat {
  2. // ...
  3. }


Ale już ta klasa jest w porządku:



  1. namespace Animals;
  2.  
  3. class Cat {
  4. // ...
  5. }


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 18:43