PHP Final Kullanımı
Hepinize merhaba dostlarım 😊. Bu yazımda sizlere başlıktan da anladığınız üzere PHP programlama dili üzerinde final kullanımını göstereceğim. Final komutunu ilk defa görenleriniz olabilir bu aşağılanacak bir şey veya yetersiz görülecek bir şey değildir hemen hemen her gün yeni bir bilgi öğrendiğimiz dünyada sürekli ama sürekli farklı bir bilgiyle karşılaşıyoruz :). Her neyse konumuza dönelim biz
Programlama dilleri üzerinde genelde ihtiyaçtan doğan OOP mimarisi ile birlikte hayatımıza girimiş olan final komutumuzun amacı bizim oluşturduğumuz class veya methodumuzun sadece tek seferlik kullanım olarak sunulmasına olanak sağlar. Normalde biz extends ediyorduk class ları veya hem ana class içerisinde hem de child class içerisinde methodlarımızı rahat rahat kullanırken final komutunu baş kısmına yazdığımız zaman programımız bize "Hooop kardeşim bu final tanımlı. Bunu birden fazla kez kullanamazsın bir kere kullan :)" şeklinde bir uyarı verdirtiyor. Bütün olay aslında bu dostlar.
Normalde yazılım mülakatlarında karşımıza OOP mimarisi ile ilgili sorularda sorulma ihtimali az da olsa vardır. Kullanımı çok sık değil diye göz ardı etmeyin derim hiç ummadığımız anda karşımıza çıkabilir. Bilgi bilgidir yeter ki kapalım :)
FİNAL METHOD OLUŞTURMA
Gelelim artık final method oluşturma kısmına. Yukarıda da dediğim gibi programlama dilleri üzerinde bir temel ihtiyaç üzerine doğmuş olan OOP mimarisinde final methodunu oluşturalım.Bunun için öncelikle index.php isimli bir dosyamızı oluşturalım ve içerisine iki adet class oluşturalım. Bunların birisi AnaClass olsun ve diğeri de CocukClass olsun. Daha sonrasında AnaClass içerisinde bir final methodu oluşturalım ve CocukClass içerisinde de bu final methodumuzu yazalım
<?php
class Anaclass{
final public function finalMethod(){
echo "Burası Final Methodumuz";
}
}
class CocukClass extends Anaclass {
public function finalMethod(){
}
}
şeklinde kodumuzu yazdık dostlarım. Sonrasında da local sunucumuzu çalıştırdığımızda karşımıza
Cannot override final method Anaclass::finalMethod()
şeklinde karşımıza bir hata çıkacaktır. Burada hata mesajı bize diyor ki: "Dostum sen AnaClass içerisinde final method oluşturmuşsun. Bu final olmasa hadi neyse çağırırdın da final olduğu için CocukClass içerisinde bunu çağıramazsın" diyor. Pekii biz bunu nasıl kullanacağız diye soracak olursanız
<?php
class Anaclass{
final public function finalMethod(){
echo "Burası Final Methodumuz";
}
}
class CocukClass extends Anaclass {
public function finalCagir(){
echo parent::finalMethod();
}
}
$cocuk = new CocukClass();
$cocuk->finalCagir();
şeklinde komutlarımızı yazdık. Buraya kadar tamamız. Local sunucumuz üzerinde çalıştırdığımızda ise ekranımıza
Burası Final Methodumuz
şeklinde ekranımıza çıktıyı rahatlıkla basar. Buradaki mantığa bakacak olursak dostlar AnaClass içerisindekini CocukClass içerisinde direkt olarak türetmek yerine bunun yerine parent::finalMethod() komutumuzu yazarak AnaClass içerisindeki final olarak tanımlanmış methodumuzu rahat bir şekilde kullanabiliriz. Bütün işlemlerimiz bu kadar basit :)
FİNAL CLASS OLUŞTURMA
Geldik bir diğer işlemlerimizden birisi olan final olarak tanımlanmış class işlemine. Bir önceki başlıktaki konumuzda yani Final Method Oluşturma başlığında AnaClass içerisindeki final olarak tanımlanmış methodumuzu CocukClass içerisinde parent::finalMethod() haricinde çağıramıyorduk bunu hepimiz gördük. Final class olayında ise bu class tan nesne oluşturabiliyoruz burada sorun yok lakin biz bu class ı extends edip diğer class larda kullanamıyoruz. Hemen öncelikle bir final class oluşturalım ve içerisine de bir method oluşturalım. Sonrasında da bu class ımızdan bir nesne oluşturup çalıştıralım
<?php
final class Deneme{
public function Kimya(){
echo "Dersimiz Kimya";
}
}
$deneme = new Deneme();
$deneme->Kimya();
şeklinde kodlarımızı yazalım. Local sunucumuz üzerinde kodlarımızı çalıştıralım. Ekranımıza
Dersimiz Kimya
şeklinde mesajımızı bastıracaktır. Bu kısma kadar tamamız diye düşünüyorum. Şimdi farklı bir class oluşturalım ve bu oluşturduğumuz final class ımızı extends etmeye çalışalım
<?php
final class Deneme{
public function Kimya(){
echo "Dersimiz Kimya";
}
}
class Okul extends Deneme{
}
şeklinde kodlarımızı yazdık dostlarım. Bu kısma kadar tamamız sorun yok. Şimdi local sunucumuz üzerinde kodlarımızı çalıştıralım. Ekranımıza gelecek mesaj
Class Okul may not inherit from final class (Deneme)
şeklinde olacaktır. Yani diyor ki dostlar "Sen burada final class oluşturdun sadece ama sadece 1 kere kullanabilirsin. Ama sen bunu extends etmeye çalışıyorsun ben sana izin veremem" şeklinde bize kızıyor :). İşte final olarak oluşturduğumuz class ımızı diğer class lar üzerinde extends edemeyeceğimizi de anlamış bulunmaktayız. Şimdi gelin bir örnekle bu öğrendiklerimizi pekiştirelim diyorum
<?php
class Personel{
final public function isim($name){
return "Eklenen Personel: ".$name;
}
}
final class Ekle extends Personel{
public function personel_ekle(){
echo parent::isim("MFSoftware Blog");
}
}
$personel_ekle = new Ekle();
$personel_ekle->personel_ekle();
şeklinde 2 ayrı bir class oluştudum. Birisini personel diğerini de ekle olarak ayarladım. Personel olarak tanımladığım class içerisine final tipinde bir method oluşturdum ve eklenecek olan personelin isminin bu method üzerinden geleceğini sağladım. Sonrasında ise Ekle isminde ve final tipinde bir class oluşturdum ve bunu da Personel class ından extends ettim. Sonrasında ise içerisine personel_ekle isminde bir method oluşturdum. Bu method içerisine de türettiğimiz class içerisindeki final olarak tanımlanmış isim() methodunun çalıştırılmasını istedim. Buradan gelen değerin de echo komutu ile ekrana bastırılmasını sağladım.
En son olarak Ekle class ından nesne oluşturdum ve içerisindeki personel_ekle() methodumuzun çalıştırılmasını sağladım. Local sunucumuzda çalıştırdığımızda da ekranımıza
Eklenen Personel: MFSoftware Blog
şeklinde bir çıktı çıkacaktır. Kodlarımız sorunsuz şekilde çalışıyor ve işlemlerimiz başarıyla gerçekleştiğine şahit olduk. Bütün işlemlerimiz bu kadar
Eveeeet dostlarım 😊. Bu yazımda sizlere PHP programlama dili üzerinde final sözcüğü nedir, neden kullanılır bunlardan bahsettim. Umarım faydalı olmuşumdur. Eksik veya hatalı bir anlatım yapmış isem benimle iletişime geçmekten çekinmeyin. Konu başlarda biraz karmaşık veya zor gelebilir anlıyorum. Öğrenme süreci içerisinde hemen hemen bu olayla karşılaşıyoruz. Bu aşamada sizlerden yapmanızı istediğim tek şey her yazımın sonunda da dediğim gibi "İstikrarlı ve Azimli Olmalısınız, Bolca Pratik Yapmalısınız". Bu dediklerimi hayat felsefeniz yaptığınız sürece başarı sizler için kaçınılmaz olacaktır. Ayrıca yazımın en başında da dediğim gibii bir oop konusu olan final kullanımını öğrenmenizin size ileride faydası olacaktır. Örneğin büyük bir proheye girdiğinizde veya iş mülakatında karşınıza çıkabilir hiç belli olmaz :). Bilgi bilgidir yeter ki kapın derim
Hayallerinizi gerçekleştirmeniz ve güzel yerlere gelmeniz dileklerimle... İyi çalışmalar dilerim :)
Yazar Hakkında
Kendi Halinde Bir Backend Developer
Zafer Yıldız
30.04.2021Ellerinize sağlık. Gerçekten faydalı bir paylaşım