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şleciBir 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.
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.
Ö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.