Hatókör megadó operátor (::)
Az alábbiak csak PHP 4-től érvényesek.
IdÅ‘nként hasznos az Å‘sosztályok metódusaira vagy tulajdonságaira hivatkozni, vagy olyan osztálymetódusokat meghÃvni, amelyek nem példányosÃtott objektumokhoz tartoznak. A :: operátor erre használható.
<?php
class A {
function pelda() {
echo "Én az eredeti A::pelda() metódus vagyok.<br />\n";
}
}
class B extends A {
function pelda() {
echo "Én a felüldefiniáló B::pelda() metódus vagyok.<br />\n";
A::example();
}
}
// nincs semmilyen objektum az A osztályból
// ez azonban ki fogja Ãrni:
// Én az eredeti A::pelda() metódus vagyok.<br />
A::pelda();
// B egy objektuát hozzuk létre
$b = new B;
// ez ki fogja Ãrni:
// Én a felüldefiniáló B::pelda() metódus vagyok.<br />
// Én az eredeti A::pelda() metódus vagyok.<br />
$b->pelda();
?>
A fenti példa meghÃvja az A osztály pelda() metódusát, habár nincs konkrét példányunk az A osztályból, tehát ezt nem Ãrhatnánk le az $a->pelda()-hoz hasonlóan. Ehelyett a pelda() egy 'osztálymetódusként' viselkedik, azaz az osztály egy függvényeként, és nem egy példány metódusaként.
Osztálymetódusok léteznek, de osztálytulajdonságok (változók) nem. Mivel a hÃvás pillanatában semmilyen objektum nem létezik, egy osztálymetódus nem használhat objektum változókat, és egyáltalán nem használhatja a $this speciális referenciát. Egy objektummetódus azonban természetesen dolgozhat globális változókkal és lokális változókkal is.
A fenti példa a B osztályban felüldefiniálja a pelda() metódust. Az A osztálytól örökölt eredeti definÃció eltűnik, és többé nem érhetÅ‘ el, hacsak nem az A osztályban megvalósÃtott pelda() függvényre hivatkozol közvetlenül, a :: operátor segÃtségével. Ennek eléréséhez A::pelda()-t kell használni (ebben az esetben Ãrhatnál parent::pelda()-t is, ahogy az a következÅ‘ szakaszban olvasható).
Ebben a környezetben van aktuálisan használt objektum, és ennek lehetnek objektum változói (tulajdonságai). Ekképpen ha egy objektummetóduson belül használod ezt az operátort, akkor alkalmazhatod a $this-t, és felhasználhatod az objektum tulajdonságait.