Aşağıdakiler sadece PHP 4 ve sonrası için geçerlidir.
Ebeveyn sınıfın işlev ve değişkenlerine atıf yapmak veya henüz örneklenmemişken bir sınıfın işlevlerini çağırmak bazen gerekebilir. Bu amaçla :: işleci kullanılır.
<?php
class A {
function misal() {
echo "Ben özgün A::misal() işleviyim.<br />\n";
}
}
class B extends A {
function misal() {
echo "Ben B::misal() olarak yeniden tanımlandım.<br />\n";
A::misal();
}
}
// A sınıfının örneği yok. Şunu basar:
// Ben özgün A::misal() işleviyim.<br />
A::misal();
// B sınıfının bir nesnesini oluşturalım.
$b = new B;
// Şunlar basılır
// Ben B::misal() olarak yeniden tanımlandım.<br />
// Ben özgün A::misal() işleviyim.<br />
$b->misal();
?>
Bu örnekte, A sınıfının misal() işlevi çağrılmaktadır. Fakat A sınıfının bir nesnesi olmadığından işlevi $a->misal() ve benzeriyle çağıramayız. Bunun yerine misal() işlevini bir 'sınıf işlevi' olarak, yani bir sınıf örneğinin değil sınıfın kendi işlevi olarak, çağırırız.
Sınıf işlevlerinin olmasına karşın sınıf değişkenleri yoktur. Aslında çağrı sırasında bir nesne dahi yoktur. Bu bakımdan, bir sınıf işlevi hiçbir nesne değişkenini kullanamaz (fakat yerel ve küresel değişkenleri kullanabilir) ve $this de hepsinde kullanılamayabilir.
Yukarıdaki örnekte B sınıfı misal() işlevini yeniden tanımlamaktadır. A sınıfındaki özgün tanım geçersiz kılındığından, yeni işlev içinden :: işleci A::misal() biçeminde kullanılarak açıkça çağrılmadıkça B sınıfından erişilebilir olmayacaktır. Aslında, çağrıyı (sonraki bölümde göreceğiniz gibi) parent::misal() biçeminde yapmak daha uygundur.
Geçerli bir nesnenin olduğu ve bu nesnenin de nesne değişkenlerinin olduğu bağlamda bir nesne işlevi içinde $this sözde değişkenini ve diğer nesne değişkenlerini kullanabilirsiniz.