Napisany sty-17-2010

namespaces

Przestrzenie nazw, czyli jedna z najbardziej oczekiwanych funkcjonalności, została udostępniona dla programistów wraz z wydaniem PHP 5.3. Namespaces pozwalają na grupowanie klas, funkcji i stałych poprzez nadawanie im unikalnych nazw, które są następnie wykorzystywane w procesie odwoływania się do tak uporządkowanych struktur kodu. Nabiera to ogromnego znaczenia na przykład w pracy grupowej. Może się bowiem zdarzyć sytuacja, w której dwóch niezależnie pracujących informatyków, napisze klasy które będą miały tę samą nazwę. Idealnym rozwiązaniem okazują się przestrzenie nazw właśnie.

praktyka

W PHP namespaces można tworzyć na dwa sposoby i oba zostały zaprezentowane poniżej:

namespace A;

function ShowMsg() {

	echo __FUNCTION__;

}

Albo tak:

namespace A {

function ShowMsg() {

	echo __FUNCTION__;

}

}

Jak widać na powyższych przykładach, przestrzeń konstruuje się z użyciem słowa kluczowego namespace, po czym określana jest jej nazwę (w tym wypadku A). Należy pamiętać, aby deklaracja ta znajdowała się na początku skryptu (przed nią może wystąpić tylko declare). Dozwolone jest też tworzenie kilku przestrzeni w jednym pliku, aczkolwiek rozwiązanie to nie jest zalecane:

namespace A ;

function ShowMsg() {

	echo __FUNCTION__;

}

namespace B ;

function ShowMsg() {

	echo __FUNCTION__;

}

Można również organizować pewnego rodzaju hierarchię, formując poziomy (sub-namespaces):

namespace Main\First ;

function ShowMsg() {

	echo __FUNCTION__;

}

namespace Main\First\One ;

function ShowMsg() {

	echo __FUNCTION__;

}

namespace Main\First\Two ;

function ShowMsg() {

	echo __FUNCTION__;

}

Zapewne zastanawiacie się jak wywoływać klasy, funkcje i stałe z różnych przestrzeni. Przełączanie się między nimi przypomina proces poruszania się po strukturze katalogów. Występuje tutaj pojęcie ścieżek względnych i bezwzględnych. Najprościej będzie to zrozumieć analizując prosty kod, zamieszczony poniżej:

// przestrzen A\First
namespace A\First {

	function ShowMsg () {
		// specjalna stala predefiniowana zawiera
		// przestrzen w ktorym sie znajduje struktura
		echo __NAMESPACE__;

	}
}

// przestrzen A\Second
namespace A\Second {

	function ShowMsg () {

		echo __NAMESPACE__;

	}
}

// przestrzen A
namespace A {

	// sciezki bezwzgledne
	\A\First\ShowMsg();
	\A\Second\ShowMsg();

	// sciezki wzgledne (wzgledem obecnej przestrzeni)
	First\ShowMSg();
	Second\ShowMSg();

	// jeszcze jeden sposob namespace to odwolanie
	// do aktualnej przestrzeni
	namespace\First\ShowMsg();
	namespace\Second\ShowMsg();

	// wywolywanie globalnych funkcji, klas i stalych
	echo \count(array(1,2,3));

}

// przestrzen "globalna"
namespace {

}

Oczywiście nie opisałem wszystkich możliwości namespaces w PHP. Zainteresowanych odsyłam TUTAJ.

Tagi : ,

Komentarze:

Napisz komentarz