Przestrzenie nazw służą nie tylko do automatycznego ładowania klas. Zapobiegają także konfliktom nazw. W rzeczywistości jest to ich główny cel.
Załóżmy, że masz projekt, który potrzebuje klasy o nazwie User
do przechowywania informacji o użytkownikach aplikacji, ale wtyczka używa także (innej) klasy o nazwie User
do przechowywania informacji. Przestrzenie nazw pozwalają tworzyć klasę w obrębie jednej przestrzeni nazw (powiedzmy MyApp
) i pozwolić wtyczce użyć innej przestrzeni nazw (powiedzmy CoolPlugin
). Kod w MyApp
przestrzeni może po prostu odnosić się User
(np. new User();
), Podobnie jak kod w CoolPlugin
przestrzeni; każdy uzyska oczekiwany wynik. Kiedy potrzebujesz użyć kodu z innej przestrzeni nazw, po prostu go prefiks. Na przykład kod w CoolPlugin
przestrzeni może uzyskać dostęp do User
klasy MyApp
za pośrednictwemnew \MyApp\User();
Alternatywą jest to, że każda klasa potrzebuje wszędzie złożonej nazwy , takiej jak class MyApp_User
i class CoolPlugin_User
. Przestrzenie nazw pozwalają w większości przypadków uprościć sprawy i przez cały czas unikać konfliktów nazw.
Edycja: Aby odpowiedzieć na pytanie: „Czy jest między nimi jakaś różnica w wydajności?”
Nie znaczący, nie. Nie przeprowadziłem testów porównawczych, ale prawdopodobnie istnieje różnica na poziomie nanosekund. To powiedziawszy, poświęcanie jakości kodu dla bardzo małych poprawek wydajności nie jest dobrą strategią, więc powinieneś używać przestrzeni nazw niezależnie. Dla testów porównawczych podobnych problemów zobacz PHPbench.com i tę odpowiedź StackOverflow .
Twój kod musi być niewiarygodnie zwarty i niezwykle wrażliwy na czas (pomyśl o handlu z wysoką częstotliwością lub zarządzaniu reakcjami nuklearnymi), zanim będziesz musiał się martwić mikrooptymalizacją w tym kontekście. Jeśli tak naprawdę jest to czasochłonne, prawdopodobnie powinieneś pisać w c, a nawet asemblerze , a nie w interpretowanych językach, takich jak PHP.