Wraz z wydaniem PHP 5.3 możemy w swoich aplikacjach korzystać z nowej funkcjonalności udostępnionej od tej wersji. Mowa o late static bindings, których zasadę działania najłatwiej będzie przedstawić, w oparciu o praktyczne przykłady ich użycia. Jednak zanim do tego dojdziemy – krótkie wprowadzenie.

parent i self

Są to dwa słowa kluczowe dzięki którym w sposób prosty, łatwy i przyjemny jesteśmy w stanie odwoływać się do stałych, właściwości statycznych oraz metod – klasy rodzica (parent) lub samej siebie (self). Oczywiście z zachowaniem wszystkich zasad dziedziczenia. Spójrzmy na poniższe dwa skrypty, ilustrujące parent i self w akcji. Prosiłbym o zwrócenie uwagi na komentarze, które zawierają szczegółowe objaśniania.

przykład pierwszy – self

class A {

	protected function Test () {

		echo __CLASS__;

	}

}

class B extends A {

	public function Call() {
		// jako ze jestesmy w klasie B,
		// slowo kluczowe self bedzie
		// odnosilo sie wlasnie do niej
		self::Test();
		// zapis rownoznaczny powyzszemu
		// aczkowiek w przypadku zmiany
		// nazwy klasy wymuszajacy na nas
		// dodatkowa ingerencje w strukture kodu:
		// B::Test();
	}

	public function Test () {

		echo __CLASS__;

	}

}

$obj = new B();
$obj->Call();

Na wyjściu otrzymamy:
B

przykład drugi – parent

class A {

	protected function Test () {

		echo __CLASS__;

	}

}

class B extends A {

	public function Call() {
		// jako ze jestesmy w klasie B,
		// slowo kluczowe parent bedzie
		// sie odnosilo do klasy rodzica - A
		parent::Test();
		// zapis rownoznaczny powyzszemu
		// aczkowiek w przypadku zmiany
		// nazwy klasy rodzica wymuszajacy na nas
		// dodatkowa ingerencje w strukture kodu:
		// A::Test();
	}

	public function Test () {

		echo __CLASS__;
	}

}

$obj = new B();
$obj->Call();

Na wyjściu otrzymamy:
A

late static bindings

Opóźnione statyczne wiązania wprowadzają dodatkowe słowo kluczowe static, uzupełniając tym samym spektrum możliwości oferowanych przez wyżej opisane: parent i self. Static bowiem, odwołuje się do klasy biorąc pod uwagę kontekst w jakim nastąpiło żądanie. Prześledźmy to na przykładzie:

class A {

	protected static function Test () {

		echo __CLASS__;

	}

	public function Call() {
		// slowo kluczowe static bedzie
		// sie odnosilo do klasy z kontekstu ktorej
		// zastapilo zadanie
		static::Test();

	}

}

class B extends A {

	protected static function Test () {

		echo __CLASS__;

	}

}

// metoda Call wywola metode klasy B, gdyz w jej kontekscie nastapilo zadanie
B::Call();

// metoda Call wywola metode klasy A, gdyz w jej kontekscie nastapilo zadanie
A::Call();

Na wyjściu otrzymamy:
BA

Osoby zainteresowane poszerzeniem wiedzy na temat late static bindings polecam zapoznanie się z dokumentacją TUTAJ. Tym samym był to mój ostatni post na temat nowości w PHP 5.3. Przyszedł więc czas na małe podsumowanie najważniejszych zmian i nowości wniesionych z tym wydaniem, w formie krótkiej listy:

  • funkcje anonimowe – dodatkowe informacje TUTAJ
  • przestrzenie nazw – dodatkowe informacje TUTAJ
  • nowdoc – dodatkowe informacje TUTAJ
  • late static bindings
  • metody magiczne __callStatic() i __invoke() – dodatkowe informacje TUTAJ
  • możliwość definiowania stałych przy użyciu słowa kluczowego const – dodatkowe informacje TUTAJ
  • instrukcja goto – dodatkowe informacje TUTAJ

Więcej informacji szukaj u źródła – w dokumentacji PHP.

Pozostaw Odpowiedź