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.