Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [namespace] Przestrzenie nazw w PHP
Forum PHP.pl > Forum > PHP > Object-oriented programming
starach
Naszła mnie taka myśl przed chwilą. Przestrzenie nazw zostały wymyślone jako kategorie obiektów, ale tak na prawdę co przemawia za używaniem ich. Jeszcze chwilę temu chciałem przebudować swój framework wprowadzając przestrzenie nazw bazując na Symfony 2.0, które podobno jest x razy szybsze właśnie głównie ze względu na ich wykorzystanie. Tak na prawdę jednak zamiast nazwy typu sysCoreApplication dostajemy \sys\Core::Application. Jeśli wprowadzić keszowanie załadowanych plików klas powiedzmy na konkretny url to cały wspaniały czar wydajności pryska jak bańka mydlana, a mnie osobiście bardziej się podoba pierwszy zapis niż drugi.

Jestem ciekaw waszego zdania na temat.
Zyx
Przestrzenie nazw zostały wprowadzone przede wszystkim dla wygody. Nie wiem, jak Tobie, ale mi się np. niezbyt podoba w wielu sytuacjach pisanie tasiemców w stylu Foo_Controller_Action_Extra_Management_Hook_Bar, np.:

  1. $foo->initialize(
  2. new Foo_Controller_Action_Extra_Management_Hook_Bar('foo'),
  3. new Foo_Controller_Action_Extra_Management_Hook_Bar('bar'),
  4. new Foo_Controller_Action_Extra_Management_Hook_Bar('joe')
  5. );


W przestrzeniach nazw pełna kwalifikowana nazwa oczywiście też może być długa, ale możemy za to zrobić import:

  1. use \Foo\Controller\Action\Extra\Management\Hook as ControlHook;
  2.  
  3. $foo->initialize(
  4. new ControlHook\Bar('foo'),
  5. new ControlHook\Bar('bar'),
  6. new ControlHook\Bar('joe')
  7. );


Ponadto tu jest jeszcze jeden powód:

http://www.zyxist.com/pokaz.php/standaryzacja_php
batman
Przestrzenie nazw są stosowane przede wszystkim po to, by stworzyć "pojemnik" na klasy. Dzięki takiemu podejściu nie musisz pilnować nazw klas, ponieważ nie muszą być unikatowe w skali całego projektu, a jedynie przestrzeni nazw. Nie ma to nic wspólnego z długością nazwy klasy.

Dobry przykład znajdziesz u mnie na blogu - Modułowe aplikacje PHP z wykorzystaniem phar i namespace
starach
Ehh powinienem częściej wasze blogi czytać. No dobra w takim razie jakie są konwencje nazywania przestrzeni nazw. To znaczy jak na przykład nadać im unikalność.
wookieb
No przecież zyxist podał ci fajny art na ten temat.
starach
No i przeczytałem go jak i wcześniejszy wpis o domknięciach. Blog batmana też. Ale ani tutaj ani tutaj nie ma podanych konwencji jakich należy się trzymać tworząc nową przestrzeń nazw.
Crozin
Bo wśród społeczności PHP jeszcze się takie konwencje nie utworzyły (z tego co kojarzę), jednakże na start masz dwie możliwości:
1) Względem nazwy projektu (\Symfony\...)
2) Względem adresu strony projektu (\org\symfony-project\...) - ten model jest stosowany np. w Javie.

A to jakie będą kolejne elementy nazwy to już tylko i wyłącznie Twoja sprawa.
Zyx
starach -> nie wiem, jak ty go czytałeś smile.gif. Cały wpis jest poświęcony właśnie tematowi standaryzacji nazewnictwa i omawia m.in. konwencję proponowaną jako standard:

* Pierwszy człon jest zawsze nazwą dostawcy (projektu) i musi być przestrzenią nazw.
* Człony mogą być albo przestrzeniami nazw, albo separowane przez _, jak w Zend Frameworku.
* Ostatni człon jest tożsamy z nazwą pliku z klasą/interfejsem.

Natomiast to, co jest w środku, zależy już od Ciebie. Dopóki pierwszy człon masz unikalny/charakterystyczny, masz spokój z tym, co będzie dalej, pod warunkiem że we własnych plikach będziesz jako tako pilnować porządku.

Konwencji javowej z odwróconą nazwą domeny nie polecam, gdyż uniemożliwi to działanie poprawne rozszerzeniu SplClassLoader, które ma szansę pojawić się niebawem w bibliotece SPL wbudowanej w PHP.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.