- Katılım
- 2 Mar 2015
- Konular
- 59,189
- Mesajlar
- 88,439
- Çözüm
- 109
- Online süresi
- 4mo 16d
- Reaksiyon Skoru
- 14,280
- Altın Konu
- 2,398
- TM Yaşı
- 11 Yıl 3 Ay 6 Gün
- Başarım Puanı
- 1,051
- MmoLira
- 695,092
- DevLira
- 234
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
PHP'de "final" anahtar kelimesi bir sınıfın, bir sınıfın içindeki bir metodun, ve bir sınıfın sabit bir özelliğinin tanımlanmasında kullanılır.
"final" Anahtar Sözcüğüne Sahip Bir Sınıf
"Final" anahtar sözcüğüyle bir sınıfın nasıl oluşturulacağına bakalım.final class myclass {
/*class members*/
}
Sınıf tanımındaki "final" anahtar sözcüğü böyle bir sınıfın genişletilmesini engeller. Başka bir deyişle, final sınıfını ebeveyn olarak kullanamazsınız. Denerseniz, PHP ayrıştırıcısı bir hata verir.
PHP:
<?php
final class myclass {
/* class body */
}
class newclass extends myclass {
/* class body */
}
?>
Bu kodu çalıştırdığınızda bir hata gösterecektir:
PHP Fatal error: Class newclass may not inherit from final class (myclass)
"final" Anahtar Kelimeli Yöntem
"final" anahtar sözcüğüyle bir yöntem oluşturmanın yolu şöyledir:class myclass {
final function myfunction() {
/* function body */
}
}
Bir yöntem tanımının önüne final anahtar sözcüğünü eklemek, bir alt sınıfta geçersiz kılınmasını önler. Final yöntemi olan bir sınıf genişletilebilir, ancak alt sınıf onu geçersiz kılamaz.
Örnek
Aşağıdaki örneğe bir göz atın.
PHP:
<?php
class myclass {
final public function hello() {
echo "Hello World!";
}
}
class newclass extends myclass {
public function hello() {
echo "Hello PHP!";
}
}
?>
Bu kodu çalıştırdığınızda bir hata gösterecektir:
PHP Fatal error: Cannot override final method myclass::hello() in hello.php
"final" Anahtar Kelimesi ile Sabit
PHP 8.1.0'dan itibaren final anahtar sözcüğü ile bir sınıfta sabit de tanımlayabilirsiniz.final public const NAME = "My Class";
Üst sınıftaki son sabiti alt sınıfta geçersiz kılmaya çalışırsanız bir hatayla karşılaşılır.
PHP:
<?php
class myclass {
final public const NAME = "My Class";
final public function hello() {
echo "Hello World!";
}
}
class newclass extends myclass {
public const NAME = "New Class";
}
?>
Bu kodu çalıştırdığınızda bir hata gösterecektir:
Fatal error: newclass::NAME cannot override final constant myclass::NAME
Örnek
Aşağıdaki PHP betiği, bir PI sabiti ve her ikisi de final olarak bildirilen area() metoduna sahip bir ebeveyn sınıfı olan ellipse içerir. Bunlar circle sınıfı tarafından miras alınır. area() fonksiyonu circle'ın alanını hesaplar.
PHP:
<?php
class ellipse {
final public const PI=22/7;
private float $a, $b;
public function __construct($x, $y) {
$this->a = $x;
$this->b = $y;
}
final public function area() : float {
return self::PI*$this->a*$this->b;
}
}
class circle extends ellipse {
public function __construct(float $x) {
parent::__construct($x, $x);
}
}
$c1 = new circle(5);
echo "Area: " . $c1->area() . PHP_EOL;
?>
Aşağıdaki çıktıyı üretecektir:
Area: 78.571428571429
Bir sınıfın örnek değişkenlerinin veya özelliklerinin final olarak bildirilemeyeceğini unutmayın.

