Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przestrzenie nazw i kontenery
Forum PHP.pl > Forum > PHP
Prph
Witam,

Czytam tu i tam w sieci informacje nt. aplikacji php i czasem pojawiaja sie terminy przestrzeni nazw i kontenerow.

Wiem, ze w C++ przestrzenie sa dosyc wygodne (domyslam sie, bo nie programuje w C++), ale po co stosowane sa w php i w jaki sposob?

Podejrzewam, ze kontenery to inne okreslenie przestrzeni. Moge sie mylic.

Pozdrawiam, Adrian.
mike
Hmm,

To jest pytanie z cyklu: "Powrót do przyszłości"?

W php nie ma przestrzeni nazw.
Mają się pojawić dopiero w PHP6, ale jak będzie nie wiadomo.
dr_bonzo
Przestrzenie nazw zapobiegaja m.in. kolizji nazw klas, tak jak klasy umozliwiaja tworzenie "funkcji" o tej samej nazwie (wewnatrz innych klas).
Cysiaczek
Czy ktoś gdzieś nie pisał, że są przestrzenie nazw dla php5 jako rozszerzenie? Bo coś mi się o uszy (oczy raczej) obiło i teraz nie jestem pewien.

Pozdrawiam,
Prph
Hmmm, zapomnialem napisac, ze wiem na czym polegaja przestrzenie nazw i to ze wiem ze w php5 ich nie ma, natomiast ze maja pojawic sie php6 winksmiley.jpg

We frameworkach pojawiaja sie przestrzenie nazw (implementacja). Np. w propozycjach Zend_Session.

Adrian.

Edit:
Czytam http://framework.zend.com/wiki/display/ZFPROP/Zend_Acl i chyba widze po co stosowac kontenery. Ktos implementowal prawa dostepu w oparciu o kontenery?
Strzałek
http://blog.dywicki.pl/2006/07/09/magiczne-namespace/

Tutaj po krótce opisane co i jak w php z namespace winksmiley.jpg
envp
Hmm, no nie o to mi chodzi...

Przestrzeie i kontenery - stosowane we frameworkach... Ktos zna?
nasty
to niema znaczenia czy to php czy nie, przestrzenie nazw (namespace), sa bardzo dobrym sposobem na organizacje aplikacji, to sie b. dobrze sprawdza w asp.net i napewno tez sie sprawdzi w php, np. w frameworkach (MVC?) b. pomoze w odzieleniu klas elemetow poszczegulnych akcji/widokow.
pozdrawiam
Prph
No powiem kolejny raz. Wiem co to przestrzenie nazw w c++. Ale chodzi mi teraz o cos co sie podobnie nazywa, ale nie jest tym o czym myslicie winksmiley.jpg winksmiley.jpg

Kontenery (byc moze namespaces) to np akcje. Wezmy Zenda, kontroller Nowosci, akcja Dodaj. Kontenerem bedzie tutaj Nowosci, ktory zawiera inne kontenery - akcje, np. Dodaj.

Mozna w ten sposob zorganizowac ACL (access controll list - mechanizmy bezpieczenstwa). Zakladamy, ze uzytkownik ADMIN ma dostep do kontenerow Nowosci->Dodaj, Nowosci->Usun. Acl przeprowadza kontrole i w razie potrzeby, odrzuca zgloszenie.

A w sesjach? Namespaces to cos w rodzaju instancji roznych sesji, np:
  1. <?php
  2. $oMojaSesja = new Session_Storage('moja_przestrzen');
  3. $oInnaSesja = new Session_storage('inna_przestrzen');
  4.  
  5. $oMojaSesja->zmienna = 'wartosc';
  6.  
  7. echo $oInnaSesja->zmienna; // zwroci null.
  8. ?>

Dziekuje za odpowiedz na moje pytanie ;-)

Pozdrawiam, Adrian.
cinekz
http://phpnamespaces.org
NuLL
Nie bede pisal jakis dlugich wywodow ale to co czytam powoduje we mnie mdlosci tiredsmiley.gif

A teraz krotko i zwiezle

Cytat
Kontenery (byc moze namespaces) to np akcje. Wezmy Zenda, kontroller Nowosci, akcja Dodaj. Kontenerem bedzie tutaj Nowosci, ktory zawiera inne kontenery - akcje, np. Dodaj.


laugh.gif

Klasa kontenerowa to klasa przechowywujaca inne obiekty i nic wiecej - taka jest definicja i tyle. Przyklad - prosze bardzo ( odrazu kod )
  1. <?
  2. class newsObject
  3. {
  4. // klasa ktora zawiera newsa - jakies tam jego pola i inne rzeczy ;]
  5. } 
  6.  
  7. class newsCollection
  8. {
  9. protected $data=array();
  10.  
  11. public function add(newsObject $news)
  12. {
  13. $this->data[]=$news;
  14. }
  15.  
  16. public function reset()
  17. {
  18. $this->data=array(); 
  19. }
  20. }
  21. ?>

newsCollection to kontener. I tyle o kontenerach winksmiley.jpg

Przestrzen nazw( ang. namespace ) to swego rodzaju kontener na nazwy. W obrębie dowolnej przestrzeni nazw każda nazwa musi być niepowtarzalna. Przestrzen nazw pozwala na utworzenie dwoch klas o takich samych nazwach, podobnie jest z funkcjami. Maly przyklad - niedziajacy w php
  1. <?
  2. namespace pkrefta
  3. {
  4. class user
  5. {
  6. //tu kod
  7. }
  8. }
  9.  
  10. namespace ktosinny
  11. {
  12. class user
  13. {
  14. //tu kod
  15. }
  16. }
  17. ?>

Tworzy sie to po to aby jesli w systemie znajda dwie te same klasy nie bylo konfilktu. Rowniez pozwala to docenic odmienne implemtancje danej metody czy inna algorytmu.

A krocej - jest to to samo co w C++.
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.