Nesne Arayüzleri
"Devtools projesi ile framework kullanma deneyiminizi daha görsel hale getirebilirsiniz."
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.
<?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.
<?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;
}
}
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;
}
}
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;
}
}
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()
{
}
}