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.

