Php de final deyimi nesne yönelimli programlamanın önemli özelliklerinden biridir. Proje geliştirirken bazı sınıf veya metotların tekrar kullanılmasının önüne geçmek isteyebiliriz. Bu durumda o sınıfın veya metodun önüne final deyimini ekleriz. Php de final deyimi sadece sınıflara ve sınıfların metotlarına uygulanabilir. Sınıf değişkenleri final olarak tanımlanamaz.
Sınıfı final tanımlama
Bir sınıfı final olarak tanımlarsak, o sınıf başka bir sınıf tarafından türetilemez (extend edilemez).
Örnek:
<?php
final class A {
}
class B extends A {
}
// Fatal error: Class B may not inherit from final class (A)
Yukarıdaki kod bloğunda sadece iki tane sınıf tanımladık. A
sınıfını final
olarak tanımlıyoruz ve B
sınıfınıda A
sınıfından türetmek istiyoruz. Fakat burada sistem bize şu şekilde ölümcül bir hata verecektir. Fatal error: Class B may not inherit from final class (A). Yani; B
sınıfı, final
olarak tanımlanan A
sınıfından miras alamaz.
Sınıfın metodunu final tanımlama
Sınıfın bir metodu final olarak tanımlanırsa, bu metot alt sınıflar tarafından geçersiz kılınamazlar (override edilemezler).
Örnek:
<?php
class A {
final public function test(){
}
}
class B extends A {
public function test(){
}
}
// Fatal error: Cannot override final method A::test()
Örnekte A
ve B
sınıflarını tanımladık. B
sınıfı A
sınıfından türetilmiştir. A
sınıfı içinde ki test()
metodu final
olarak tanımlandığı için, alt sınıfta (B
) biz bu metodu tekrar tanımlamak istersek sistem bize şu ölümcül hatayı verecektir. Fatal error: Cannot override final method A::test(). Yani; A
sınıfı içinde final olarak tanımlanan test()
metodu override edilemez.