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 Userdo przechowywania informacji o użytkownikach aplikacji, ale wtyczka używa także (innej) klasy o nazwie Userdo 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 MyAppprzestrzeni może po prostu odnosić się User(np. new User();), Podobnie jak kod w CoolPluginprzestrzeni; każdy uzyska oczekiwany wynik. Kiedy potrzebujesz użyć kodu z innej przestrzeni nazw, po prostu go prefiks. Na przykład kod w CoolPluginprzestrzeni może uzyskać dostęp do Userklasy MyAppza pośrednictwemnew \MyApp\User();
Alternatywą jest to, że każda klasa potrzebuje wszędzie złożonej nazwy , takiej jak class MyApp_Useri 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.