PHP Interface

Merhaba arkadaşlar. Bu yazımızda tüm nesne yönelimli dillerde bulunan Interface yani arayüz yapısından ve PHP'de nasıl kullanıldığından bahsedeceğiz.

Interface Nedir ?

Bir önceki yazımızda Abstract Class'lardan bahsetmiştim. Abstract Class'lar kalıtım konusunun içine giriyor.

Interface soyut bir sınıftır. Abstract class bildiğiniz gibi bir kere kullanılabiliyordu. Yani bir sınıf başka bir sınıftan sadece 1 kere extend edilebiliyordu. Interface yapısında ise bir sınıf tanımlarken birden fazla sınıftan türetilebilmektedir. PHP'de interface ile sınıf türetmek için implement anahtar sözcüğünü kullanırız. Ayrıca Interface classlar "new" anahtar sözcüğü ile türetilemezler.

Bir ya da birden fazla sınıf aynı interface yani arayüzü kullanırsa buna polymorphism (çok biçimlilik) denir.

İnterface şu şekilde tanımlanır :

<?php
interface isim{
  public function ilkMetot();
  public function ikinciMetot($name, $color);
  public function ucuncuMetot() : string;
}
?>

Interface Kullanımı

Interface'leri kullanmak istediğimiz sınıfa çağırmak için implements anahtar sözcüğünü kullanırız.

Bir sınıfı interface ile implement edersek, interface sınıfındaki tüm metotları kullanmak zorundayız. İlerleyen zamanlarda Design pattern'lerden bahsederken bol bol abstract ve interface kullanacağız. Şimdilik sadece ne işe yaradığını bilmeniz yeterli.

Şimdi bir örnekle konuyu pekiştirelim.

<?php
interface Agac {
  public function agacTuru();
}


class Gurgen implements Agac {
  public function agacTuru() {
    echo "Bu bir gürgen ağacıdır.";
  }
}
class Erik implements Agac {
  public function agacTuru() {
    echo "Bu bir erik ağacıdır.";
  }
}
$gurgen = new Gurgen();
$erik = new Erik();
$gurgen->agacTuru();
echo "<br>";
$erik->agacTuru();

/*
Çıktı: 
Bu bir gürgen ağacıdır.
Bu bir erik ağacıdır.
*/
?>

Yukarıdaki kodda Gurgen ve Erik adında 2 sınıf oluşturduk ve bu sınıfları Agac sınıfından implements ettik. Ve programımız doğru bir şekilde çalıştı.

Bir de interface sınıfı new anahtar sözcüğüyle tanımlamaya çalışalım.

<?php
interface Agac {
  public function agacTuru();
} 
$agac = new Agac();
$agac->agacTuru();
?>

Bu kod çalıştığında ise şu hata ekranda belirecektir. İnterface sınıflar new anahtar kelimesi ile nesneye çevrilemezler.

Fatal error: Uncaught Error: Cannot instantiate interface Agac in C:\xampp\htdocs\egitim\index.php:8 Stack trace: #0 {main} thrown in C:\xampp\htdocs\egitim\index.php on line 8

Son örneğimizde ise Interface sınıfı içinde tanımladığımız bir metodu, yeni oluşturduğumuz ve interface sınıfından implement ettiğimiz sınıfta kullanmayalım: Bakalım program kızacak mı ?

<?php
interface Agac {
  public function agacTuru();
}
class Mese implements Agac
{
  public function yas( )
  {
  	echo "Tahminen 50 falan";
  }
}
$mese = new Mese();
$mese->yas();
?>

Kod çalıştığında ekranda şu yazacaktır.

Fatal error: Class Mese contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Agac::agacTuru) in C:\xampp\htdocs\egitim\index.php on line 5

Yani kodumuz diyor ki Agac sınıfından bunu implements ediyorsun ama Agac metodunda olan agacTuru metodunu Mese sınıfında kullanmıyorsun. Ben bu şartlar altında çalışamam ya şartları düzelt ya da istifa ederim diyor. Umarım olayı anlatabilmişimdir :)


YAZAR HAKKINDA

26 Yaşında. Araştırmayı seven, bir şeyler öğretmeye meraklı bir Bilgisayar Mühendisi

0 YORUM

Bu konuya henüz yorum yapılmamış

Yorum Yap

@COPYRIGHT KodlamakLazım Tüm Hakları Saklıdır.