Nesne arayüzleri, bir sınıfın gerçeklemesi gereken yöntemlerin belirtildiği kodu, bu yöntemlerin nasıl gerçekleneceğini tanımlamaksızın oluşturmanıza imkan sağlar.
Arayüzler, sınıflardan farklı olarak class yerine interface anahtar sözcüğü kullanılarak ve içeriğinde hiçbir tanımlı yöntem olmaksızın tanımlanırlar.
Bir arayüzdeki tüm yöntemler, arayüzün doğası gereği public
olarak bildirilmelidir.
Bazı bağlamlarda, örneğin imalat kipinde kullanım için kullanışlı olabilecek bir arayüz içinde bir kurucu bildirmek mümkündür.
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:
PHP 5.3.9 öncesinde, belirsizliğe yol açacağından, bir sınıf, aynı isme sahip yöntem içeren iki arayüzü gerçekleyemezdi. PHP'nin en son sürümleri aynı imzaya sahip oldukları takdirde aynı isimli yöntemlere izin vermektedir.
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, kendilerini miras alan sınıflar veya arayüzler tarafından geçersiz kılınamamaları dışında tıpkı sınıf sabitleri gibi çalışır.
Ö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.
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.