final Anahtar Sözcüğü

Tanımı final anahtar sözcüğü ile başlayan yöntem, özellik veya sabiti çocuk sınıflar geçersiz kılamaz. Tanımı final sözcüğüyle ile başlayan bir sınıf ise genişletilemez.

Örnek 1 - final yöntem örneği

<?php
class AnaSınıf {
   public function deneme() {
       echo "AnaSınıf::deneme() çağrıldı\n";
   }

   final public function başkaDeneme() {
       echo "AnaSınıf::başkaDeneme() çağrıldı\n";
   }
}

class ÇocukSınıf extends AnaSınıf {
   public function başkaDeneme() {
       echo "ÇocukSınıf::başkaDeneme() çağrıldı\n";
   }
}
// Ölümcül hata ile sonuçlanır: AnaSınıf:başkaDeneme() final yöntemi
// ÇocukSınıf::başkaDeneme() yöntemiyle geçersiz kılınamaz
?>

Örnek 2 - final sınıf örneği

<?php
final class AnaSınıf {
   public function deneme() {
       echo "AnaSınıf::deneme() çağrıldı\n";
   }

   // Sınıf zaten final olduğundan buradaki final gereksizdir
   final public function başkaDeneme() {
       echo "AnaSınıf::başkaDeneme() çağrıldı\n";
   }
}

class ÇocukSınıf extends AnaSınıf {
}
// Ölümcül hata ile sonuçlanır: ÇocukSınıf final bir sınıf
// olan AnaSınıf'ın çocuğu olarak oluşturulamaz
?>

Örnek 3 - PHP 8.4.0 ve sonrasında Final özellik örneği

<?php
class BaseClass {
   final protected string $test;
}

class ChildClass extends BaseClass {
    public string $test;
}
// Onulmaz hata ile sonuçlanır: Cannot override final property BaseClass::$test
?>

Örnek 4 - PHP 8.1.0 ve sonrasında Final sabit örneği

<?php
class Foo
{
    final public const X = "foo";
}

class Bar extends Foo
{
    public const X = "bar";
}

// Ölümcül hata: Bar::X, final constant Foo::X ile geçersiz kılınamaz
?>

Bilginize: PHP 8.0.0 itibariyle, private yöntemler, kurucular hariç final olarak bildirilememektedir.

Bilginize: private(set) olarak bildirilen bir özellik örtük olarak final'dir.