PHP Nesne Tabanlı Programlamada Kalıtım

PHP OOP Kalıtım Yapısı

PHP ile nesne tabanlı programlama konusuna daha önceki yazımızda değinmiştik. Bu yazıda ise kalıtım konusunu daha detaylı bir şekilde ele alacağız.

Bir sınıf oluşturduktan sonra, bu sınıftan başka bir sınıfı türetebiliriz. Bu durum bizi aynı kodları tekrar yazma zahmetinden kurtarır. Aynı yapıların tekrar tekrar kullanılacağı durumlarda bunları bir sınıf içerisine almak ve bu yapıları kullanan alt sınıflar oluşturmak en mantıklı çözüm olacaktır. Kalıtım özelliğini extends anahtar sözcüğü ile kullanıyoruz. Bir örnekle konuya giriş yapalım.

Kullanıcı ve Üye olmak üzere iki sınıfımız var. Üye sınıfı Kullanıcı sınıfı kullanılarak türetilmiş durumda. Bunu sınıfı oluştururken extends anahtar sözcüğünü kullanarak belirttik. Kullanıcı sınıfı iki özelliğe sahip. Bunlar isim ve şifre olarak belirtilmiş. Görünürlükleri ise public olarak ayarlanmış. Bu durumda bu iki özelliğe de sınıfın dışından erişebiliriz. Kullanıcı sınıfında bir de metot bulunmakta. Kaydet metodunu kullanıcıyı veritabanına kaydetmek için kullanılabilecek bir metot olarak düşünebiliriz.

Üye sınıfının da kendisine ait iki özelliği bulunuyor. Bunlar telefon ve mail olarak belirtilmiş. Kendisine ait olan bir de metot var. Göster metodu ile elde edilen bilgiler ekrana yazdırılıyor. Üye sınıfında bir de miras aldığı özellik ve metotlar bulunmakta. Kullanıcı sınıfına ait olan isim ve şifre özelliği ile kullanıcı_kaydet metodu miras olarak, türetilen bu sınıfa aktarılmıştır.

Nesne ismiyle oluşturulan sınıf örneğinde, dikkat edilirse türetilen sınıf tercih edilmiştir. Üye sınıfının özelliklerine de erişmek istendiği için bu yöntem tercih edildi. Eğer sadece isim, şifre ve kullanıcı_kaydet metodunu kullanacak olsaydık Kullanıcı sınıfının yeni bir örneğini oluşturabilirdik.

this anahtar sözcüğü ile oluşturulan nesnedeki statik olmayan özellik ve metotlara erişebiliyoruz. Sınıf içerisinde kullanılan statik ögelere ise sınıfın adı kullanılarak erişebilir. Örneğin yukarıdaki uygulamadan bağımsız olarak üye sınıfa ait statik website özelliği olduğunu düşünelim. Bu özelliğe erişmek için aşağıdaki yöntem kullanılmalıdır.

Sınıf ismi yazıldıktan sonra iki defa “:” (iki nokta üst üste) konulur ve statik özellik veya metoda erişilir.

parent deyimi

Türetilen sınıftaki bir metodun ismiyle ana sınıftaki metodun ismi aynı olabilir. Böyle bir durumda alt sınıfa ait metot ana sınıftaki metodun üzerine yazılır. Bir başka deyişle, ana sınıfın metodunu miras alan alt sınıf kendisine ait olan metodu onun yerine kullanır. Ana sınıfa ait metodu kullanmak istenirse parent operatörüne başvurulur.

Ana sınıfta ve ondan türetilen alt sınıfta aynı isme sahip iki metot bulunmaktadır. Oluşturulan nesne ile bu metoda erişilmek istendiğinde alt sınıfa ait olan test metodu çalışacak ve ekrana alt sınıfa ait olduğu yazacaktır. parent operatörüyle birlikte ana sınıfa ait test metodunu ise test2 metodunun içerisinde çağırdık. Ekran çıktısı aşağıdaki gibi olacaktır.

Alt sınıfa ait olan metodun kullanımı konusunda tereddüt yaşamak istemiyorsanız self anahtar sözcüğünü kullanabilirsiniz.

Yukarıdaki gibi kullanıldığında oluşturulan nesne hangi sınıfa aitse o sınıfa ait metodu kullanacaktır.

final Metodu

Türetilen sınıfın ana sınıfa ait metotların üzerine yazmasını istemiyorsanız final metodunu kullanabilirsiniz. Alt sınıfta ana sınıfa ait final özelliğinin kullanıldığı bir metot ile aynı isme sahip başka bir metot oluşturulamaz.

 Yukarıdaki örnekte ana sınıfa ait test metodunu değiştirelim.

Bu durumda alt sınıfta test ismiyle bir metot oluşturmaya çalıştığımızda hata verecektir. final sözcüğünü olası hataların önüne geçmek için önlem amacıyla kullanabilirsiniz.

 

 

Yorum Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

error: