| Opozorilo |
Naslednje je veljavno samo v PHP 4. |
Včasih je uporabno uporabljati funkcije in sprememnljivke v osnovnem razredu ali uporabljati funkcije v razredih, ki se nimajo instance. Za to uporabljamo :: operator.
class A
{
function example()
{
echo "Jaz sem funkcija A::example().<br>\n";
}
}
class B extends A
{
function example()
{
echo "Jaz sem redefinirana funkcija B::example().<br>\n";
A::example();
}
}
// objekt razreda A ne obstaja.
// Izpis
// Jaz sem funkcija A::example().<br>
A::example();
// naredimo objekt razreda B.
$b = new B;
// izpis
// Jaz sem redefinirana funkcija B::example().<br>
// Jaz sem funkcija A::example().<br>
$b->example(); |
Zgornji primer kliče funkcijo expample() v razredu A, ampak objekt razreda A ne obstaja, torej ne moremo napisati $a->example() ali podobno. Namesto tega, kličemo funkcijo example() kot 'razredno funkcijo', torej kot funkcijo samega razreda in ne objekta tega razreda.
Obstajajo razredne funkcije, a ne obstajajo razredne spremenljivke. Dejstvo je, da med klicom objekta ni. Torej razredna funkcija ne sme uporabljati objektnih spremenljivk (lahko uporablja lokalne in globalne spremenljivke) in seveda ne sme uporabljati $this.
V zgornjem primeru, razred B redefinira funkcijo example(). Originalna definicija v razredu A je uničena in ni več na voljo, razen če specificirate implementacijo funkcije example() v razredu A z operatorjem ::. Napišite A::example() da to naredite (pravzaprav bi morali pisati parent::example(), kot je prikazano v naslednjem primeru).
V tem kontekstu, obstaja trenutni objekt in ima lahko objektne spremenljivke. Torej, ko je uporabljen ZNOTRAJ objektne funkcije, lahko uporabimo $this in objektne spremenljivke.