EN İYİ 10 DERS :

Php'de Interface Nedir? Nasıl Kullanılır?

CodeIgniterBu yazıda sizlere Php’de interface kullanımından bahsedeceğim. Eğer daha önce Class, Extends, Public vb. terimleri hiç duymadıysanız veya hiç OOP kod yazmadıysanız nesne tabanlı programlama video derslerini izlemenizi ve ardından bu yazıyı okumanızı öneririm.

Interface’in Türkçe karşılığı arayüz demektir. - Biliyorsanız kızmayın yahu bilmeyenler için söyledim. :) - Özellikle ekip olarak çalışılan yazılım projelerinde standart bir yapı ortaya çıkarılmasına ve daha düzenli bir yapıya sahip olmanıza yardımcı olabilecek bir yöntemdir. Bir veritabanı sınıfı oluşturuyorsanız ve birden fazla adaptör kullanmanız gerekiyorsa (mysql, oracle, postgresql vb.) tüm sınıfları bu arayüz üzerinden oluşturarak herkesin belirlenen kalıpta kod yazması sağlanabilir. Çünkü yazdığımız sınıflarda arayüze uygun olmayan veya eksik kod yazdığımızda hata alırız. Özetle bizi tanımladığımız arayüze uygun kod yazmaya zorlar. Interface içinde sadece metodları tanımlarız ve herhangi bir işlevsel kod bulundurmayız. Sınıflarda olduğu gibi extends ile mevcut arayüzleri genişletebiliriz. Oluşturduğumuz bir sınıf birden fazla arayüzün özelliklerini alabilir. Teorik olarak bu kadar bilgi yeterli olmuştur umarım. Interface’in kafanızda biraz daha somutlaşması için hemen kodlarımızı yazmaya başlayalım.

Apc ve memcache olmak üzere 2 alternatif olan bir cache(Önbellek) kütüphanesi yazmak istediğimizi düşünelim. Oluşturacağımız 2 sınıfında bir arayüzün özelliklerini almasını sağlayarak aynı metodları kullanmasını ama farklı işlemleri yapmasını sağlayabiliriz.

Interface Cache
{
	public function setCache($value);
	public function unsetCache($value);
	public function getCache($value);
}

Burada "Cache" isminde bir arayüz oluşturduk. Sınıfları "Class Sınıfİsmi" şeklinde oluşturuyorduk. Arayüzleri de "Interface ArayüzAdı" şeklinde oluşturuyoruz. Arayüzü oluşturduktan sonra setCache, unsetCache ve getCache isminde 3 tane public fonksiyon oluşturduk ve bu fonksiyonlara "value" parametresini tanımladık. Ancak dikkat ederseniz bu fonksiyonların süslü parantezlerini açıp kodlarını yazmadık. Fonksiyon parantezinden sonra noktalı virgül ile satırı sonlandırdık. Yukarıda "Interface içinde sadece metodları tanımlarız ve herhangi bir işlevsel kod bulundurmayız." derken kastettiğim şey tam olarak buydu. Artık bu arayüzün özelliklerini alarak oluşturulan tüm sınıflar bu kalıba uymak zorunda olacaktır.

Class apc implements Cache
{
	public function setCache($value)
	{
		// Önbelleğe Kaydet :
		// apc_add('fullName', 'İbrahim Hızlıoğlu'); vb.
	}
	
	public function unsetCache($value)
	{
		// Önbellekten Sil
		// apc_delete('fullName'); vb.
	}
	
	public function getCache($value)
	{
		// Önbellekten Veriyi Oku
		// apc_fetch('fullName'); vb.
	}
}

Class memCache implements Cache
{
	public function setCache($value)
	{
		// Önbelleğe Kaydet :
		// memcache_add('fullName', 'İbrahim Hızlıoğlu'); vb.
	}
	
	public function unsetCache($value)
	{
		// Önbellekten Sil
		// memcache_delete('fullName'); vb.
	}
	
	public function getCache($value)
	{
		// Önbellekten Veriyi Oku
		// memcache_get('fullName'); vb.
	}
}

Burada ise "apc" ve "memcache" olmak üzere 2 tane sınıf oluşturdum. Sınıfları tanımlarken "implements Cache" yazdığımız için bu sınıflar "Cache" isimli arayüzde tanımladığımız standartlara göre kodlanmak zorunda olacak. O yüzden 2 sınıf içinde setCache, unsetCache ve getCache fonksiyonları olmak zorundadır. Aynı zamanda bu fonksiyonlara "value" parametresini de tanımlamamız gerekiyor. Eğer 3 fonksiyondan birini veya parametreleri tanımlamazsanız : "Fatal error: Declaration of memCache::getCache() must be compatible with that of Cache::getCache() in ..." , "Fatal error: Class memCache contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Cache::getCache) in ..." vb. ölümcül hatalar almanız kaçınılmazdır.

NOT 1 : Cache sınıfı ve arayüzünü sadece örnek olması açısından çok basit bir şekilde hazırladım. O yüzden interface ve sınıf içeriklerinin modülerliğini dikkate almayın lütfen.

NOT 2 : Bu makale Interface hakkında temel bilgileri içermektedir. Arayüzlerin genişletilmesi vb. diğer detaylar örneklendirilmemiştir.

Ayrıca "interface" ilginizi çektiyse :

yazılarını da incelemenizi öneririm.

Yazıyı Ekleyen Editör :

Yazının Eklenme Tarihi :

İbrahim Hızlıoğlu
26 Mayıs 2011 - Perşembe Günü

Yazının Okunma Sayısı :

Yazının Kategorisi :

2583 Defa Okundu
Php

Bu Yazıya Ait Etiketler :

php interface, php oop, php arayüz, php 5 özellikleri, php 5 yenilikleri, php 5 avantajları, php interface ve implement, php dersleri, php kodları, php örnekleri, php eğitimi, php makale, php nesne tabanlı programlama, php ile oop, php object oriented programing, php nesneye yönelik programlama, php arayüzler, php interface kullanımı, php interface nedir, php implements nedir