| Figyelem |
Az alábbiak csak PHP 4-ben érvényesek. |
Időnként hasznos az ősök metódusaira vagy tulajdonádaira hivatkozni, vagy olyan osztály metódusokat meghívni, amik nem példányosult objektumokhoz tartoznak. A :: operátor erre használható.
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 a pelda() metódusát az A osztálynak, habár nincs konkrét példányunk az A osztályból, tehát nem írhatnánk azt, hogy $a->pelda(), vagy valami hasonlót. Ehelyett a pelda() egy 'osztály metódusként' viselkedik, azaz az osztály egy függvényeként, és nem egy példány metódusaként.
Osztály függvények léteznek, de osztály tulajdonságok (változók) nem. Mivel a hívás pillanatában semmilyen objektum nem létezik, egy osztály metódus nem használhat objektum változókat, és egyáltalán nem használhatja a $this speciális referenciát. Egy objektum metódus azonban természetesen dolgozhat globális változókkal és lokális változókkal is.
A fenti példában a B osztály felüldefiniálja a pelda() metódust. Az eredeti definíció az A osztályból eltűnik, és nem érhető el többé, hacsak nem az A osztályban megvalósított pelda() függvényre hivatkozol közvetlenül, a :: operátor segítségével. Írj A::pelda()-t, hogy elérd ezt a hatást (ebben az esetben írhatnál parent::pelda()-t is, ahogy a következő bekezdésekben olvasható).
Ebben a környezetben van egy aktuálisan használt objektum, és ennek lehetnek objektum változói (tulajdonságai). Ezért ha egy objektum függvényen belül használod ezt az operátort, alkalmazhatod a $this-t, és az objektum tulajdonságokat.