Nesne Arayüzleri


    × Bunları biliyor muydunuz?
"Konsoldan 'php zerocore create-grand-vision' gibi basit bir komutla tüm veritabanı ve tablolarının model dosyasını oluşturabilirsiniz."


Nesne arayüzleri (Interface) bir sınıfın prototipini oluşturma veya bu arayüze bağlı sınıfın arayüzün içerdiği yöntemleri içermeye zorlama gibi amaçlarla kullanılır. En yaygın ve önemli kullanımı aynı yöntemleri içerecek farklı sınıflar için ortak bir arayüz oluşturmasıdır. Böylece tür dayatmaları ile farklı sınıflara ait örnekleri ortak arayüz sayesinde alt yöntemlere iletebilirler. Sınıflar gibi tasarlanırlar ancak class deyimi yerine interface deyimi kullanırlar. Sınıflara dahil edilirken de implements deyimi ile dahil edilirler. Bir sınıf aynı anda birden fazla arayüz de içerebilir.

 

 

 

Nesnel Niteliklerin özellikleri şunlardır;

Sadece sınıflarla kullanılabilirler.
Bir sınıf içinde birden fazla arayüz barındırabilir.
Sınıflar gibi örneklenemezler.
İçerisinde yer alan yöntemler public görünürlüğe sahip ve gövdesiz olmak zorundadırlar.
Dahil edildikleri sınıflarda yer alan yöntemler ile aynı ya da daha dar kapsamda olmalıdır.
Aynı yöntemleri içeren birden fazla sınıf için ortak arayüz oluştururlar.

 

 

# Söz Dizimi


Nesne arayüzlerinin söz dizimi sınıfların söz dizimine benzemekle birlikte class yerine interface deyimini kullanılır. 

<?php interface ExampleClassInterface
{
    # Yöntemler public görünürlüğe sahip ve gövdesiz olmalıdır.
    public function exampleFunction();
}

 

 

# Nesne Arayüz (Interface) Oluşturun


Arayüzler yukarıdaki söz diziminde gösterildiği gibi bir içerikle oluşturulurlar.

Dosya: VehicleInterface.php
<?php interface VehicleInterface
{
    public function startEngine(Array $connection);

    public function setColor(String $color);

    public function getColor() : String;
}

 

 

# Nesne Arayüzünü Kullanın


Yukarıda örnek amaçlı oluşturduğumuz interface dosyamızı kullanacağımız sınıf içerisinde implements deyimi ile belirtilerek dahil ederiz.

Dosya: Vehicle.php
<?php class Vehicle implements VehicleInterface
{
    protected $color = 'White';
 
    public function startEngine(Array $connection)
    {
        return $connection;
    }

    public function setColor(String $color)
    {
        $this->color = $color;
    }

    public function getColor() : String
    {
        return $this->color;
    }
}
Ölümcül Hatalar

Arayüz dahil edilmiş bir sınıf ilgili arayüzde yer alan bütün yöntemleri bire bir içermek zorundadır. Aksi halde ölümcül hata verir.

<?php interface ExampleInterface
{
    public function tests();
}

class Example implements Example
{
    public function test()
    {
        return true;
    }
}
Fatal error: Class Automobile contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (AutomobileInterface::tests) in C:\xampp\htdocs\test.php on line 8

Ayrıca sınıfta yer alan yöntemler kapsam olarak aynı veya geniş olmak zorundadır.

<?php interface ExampleInterface
{
    public function test(String $a);
}

class Example implements ExampleInterface
{
    public function test()
    {
        return true;
    }
}
Fatal error: Class Automobile contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (AutomobileInterface::tests) in C:\xampp\htdocs\test.php on line 8
Çoklu Arayüz Kullanımı

 Bir sınıfa birden fazla arayüz dahil edilebilir.

<?php interface ExampleInterface
{
    public function example();
}

interface OtherInterface
{
    public function other();
}

class Example implements ExampleInterface, OtherInterface
{
    public function example()
    {
        
    }

    public function other()
    {

    }
}