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.