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 olarakfinal
'dir.