Wewnątrz klasy możesz korzystać zarówno z odwołania poprzez słowo kluczowe self jak i poprzez nazwę kwalifikowaną, z użyciem nazwy klasy. Np:
<?php
class A {
public static function Statyczna() {
echo 'Statyczna';
}
public function Zwykla() {
self::Statyczna();
A::Statyczna(); // równoważny zapis
}
}
?>
Na zewnątrz wywołanie statycznej metody możliwe jest zarówno przy użyciu instancji obiektu, jak i samej klasy:
<?php
$a = new A;
$a->Statyczna();
A::Statyczna(); // to samo co wyżej
?>
W przypadku dziedziczenia, chcąc wywołać metodę statyczną z klasy bazowej, można użyć zamiast słowa self, słowo parent ( w sytuacji kiedy zasłoniliśmy metodę statyczną w klasie pochodnej - zamiana taka nie jest konieczna, ponieważ metody statyczne są dziedziczone ).
W PHP wersji 5.3 wprowadzona została nowa funkcjonalność - późne wiązanie metod statycznych. Wprowadzono nowe zastosowanie słowa kluczowego static. Późne wiązanie umożliwia tworzenie wirtualnych metod statycznych.
class A {
public static function Statyczna() {
echo 'Statyczna A';
}
public static function PozneWiazanie() {
static::Statyczna(); // odwołanie poprzez static, a nie self
}
public static function WczesneWiazanie() {
self::Statyczna(); // zawsze wywoła metodę z tej klasy
}
}
class B extends A {
public static function Statyczna() {
echo 'Statyczna B';
}
}
B::WczesneWiazanie(); // metoda "Statyczna()" z klasy A
B::PozneWiazanie(); // metoda "Statyczna()" z klasy B
Obydwie metody: WczesneWiazanie() i PozneWiazanie() zostały odziedziczone w klasie B z klasy A.
Pierwsze wywołanie B::WczesneWiazanie() powoduje wywołanie metody z klasy A, pomimo tego, że została ona przesłonięta w klasie pochodnej. Wynika to z wczesnego wiązania, które jest domyślne w przypadku użycia słowa self. Natomiast drugie wywołanie działa już poprawnie w tym sensie, że odwołanie, które następuje wewnątrz odziedziczonej metody z klasy A, jest poprawnie przekierowywane do statycznej metody klasy B (jej nowej definicji).