Sınıflar ve Nesneler
PHP Manual

Nesne Arayüzleri

Nesne arayüzleri, bir sınıfın gerçeklemesi gereken yöntemlerin belirtildiği kodu, bu yöntemlerin nasıl yönetileceğini tanımlamaksızın oluşturmanıza imkan sağlar.

Arayüzler, standart sınıflardan farklı olarak hiçbir yöntemin içeriği tanımlanmaksızın interface anahtar sözcüğü kullanılarak tanımlanırlar.

Bir arayüzdeki tüm yöntemler, arayüzün doğası gereği public olarak bildirilmelidir.

implements işleci

Bir arayüzü gerçeklemek için, implements işleci kullanılır. Arayüzdeki tüm yöntemler bir sınıf içersinde gerçeklenmelidir; aksi takdirde bir ölümcül hata alırsınız. Bir sınıfın, birden fazla arayüz tanımlaması arayüzler virgülle ayrılarak sağlanabilir.

Bilginize:

Belirsizliğe yol açacağından, bir sınıf aynı işlev isimlerine sahip iki arayüz gerçekleyemez.

Bilginize:

Arayüzler, sınıflar gibi extends işleciyle genişletilebilir.

Bilginize:

Bir arayüzü tanımlayan bir sınıf, bunu arayüzde tanımlı yöntemleri kullanarak yapmalıdır, yoksa işlem ölümcül hata ile sonuçlanır.

Sabitler

Arayüzlerin sabitlerinin olması mümkündür. Arayüz sabitleri tıpkı sınıf sabitleri gibi çalışırlar. Kendilerini miras alan sınıflar veya arayüzler tarafından geçersiz kılınamazlar.

Örnekler

Örnek 1 - Arayüz örneği

<?php
// 'iTemplate' arayüzünü tanımlayalım
interface iTemplate
{
    public function 
setVariable($name, $var);
    public function 
getHtml($template);
}

// Arayüzü gerçekleyelim
// Bu çalışacaktır
class Template implements iTemplate
{
    private 
$vars = array();

    public function 
setVariable($name, $var)
    {
        
$this->vars[$name] = $var;
    }

    public function 
getHtml($template)
    {
        foreach(
$this->vars as $name => $value) {
            
$template = str_replace('{' . $name . '}', $value, $template);
        }

        return 
$template;
    }
}

// Bu çalışmayacaktır
// Ölümcül hata: BadTemplate sınıfı 1 soyut yöntem içermektedir
// dolayısıyla soyut olarak tanımlanması gerekir (iTemplate::getHtml)
class BadTemplate implements iTemplate
{
    private 
$vars = array();

    public function 
setVariable($name, $var)
    {
        
$this->vars[$name] = $var;
    }
}

?>

Örnek 2 - Genişletilebilir Arayüzler

<?php
interface a
{
    public function 
foo();
}

interface 
b extends a
{
    public function 
baz(Baz $baz);
}

// Bu çalışır
class c implements b
{
    public function 
foo()
    {
    }

    public function 
baz(Baz $baz)
    {
    }
}

// Bu çalışmaz, ölümcül hatayla sonuçlanır
class d implements b
{
    public function 
foo()
    {
    }

    public function 
baz(Foo $foo)
    {
    }
}
?>

Örnek 3 - Çok sayıda anayüz oluşturma

<?php
interface a
{
    public function 
foo();
}

interface 
b
{
    public function 
bar();
}

interface 
c extends a, b
{
    public function 
baz();
}

class 
d implements c
{
    public function 
foo()
    {
    }

    public function 
bar()
    {
    }

    public function 
baz()
    {
    }
}
?>

Örnek 4 - Arayüzler ve sabitleri

<?php
interface a
{
    const 
b = 'Arayüz sabiti';
}

// Şunu basar: Arayüz sabiti
echo a::b;


// Sabitler geçersiz kılınamayacağından bu çalışmaz.
// Sınıf sabitleri için de bu böyledir.
class b implements a
{
    const 
b = 'Sınıf sabiti';
}
?>

Bir arayüz tür dayatarak belli bir nesnenin belli yöntemleri içermesini sağlayabilir. Ayrıca bakınız: instanceof işleci ve Tür Dayatma.