Digitalmapia adalah situs dimana semua orang bisa menulis artikelnya sendiri. Klik "Login/Register untuk masuk, lalu klik "Tulis Artikel" untuk mulai menulis.

Mengenal Interface pada Laravel

Pada Laravel, interface adalah sebuah kontrak mengenai method-method apa saja yang akan diimplementasikan pada sebuah class. Sebenarnya, interface tidak hanya terdapat pada Laravel, pada PHP Native-pun terdapat konsep tentang interface. Lebih jauh, Interface juga terdapat pada bahasa pemrograman java, .Net dan lain-lain. Namun, karena kita sedang membahas laravel, kita hanya akan berbicara mengenai interface pada Laravel.

Mengenal Interface Pada Laravel

Membuat interface sangatlah mudah, seperti membuat sebuah class biasa. Bedanya, kita menggunakan keyword interface di depannya dan setiap nama interface selalu diakhiri dengan kata ‘Interface’. Sebagai contoh apabila kita ingin membuat interface untuk televisi, kita akan menggunakan TelevisiInterface.

interface TelevisiInterface {
    public function hidupkan();
    public function matikan();
    public function gantisaluran();
}

Dengan membuat sebuah interface seperti diatas, pada setiap turunan dari interface tersebut haruslah terdapat method hidupkan(), matikan() dan gantisaluran(). Perhatikan contoh berikut:

class Samsung implements TelevisiInterface {
    public function hidupkan() {
        echo 'Televisi dihidupkan';
    }
    public function matikan()  {
        echo 'Televisi dimatikan';
    }
    public function gantisaluran() {
        echo 'Saluran diganti';
    }
}

Perhatikan pada contoh program diatas, kita menggunakan implements untuk membuat turunan dari sebuah interface. Hal ini berbeda jika dibandingkan ketika kita membuat turunan dari sebuah class biasa dimana kita menggunakan extends.

Menggunakan interface di Laravel

Sekarang, kita akan menggunakan interface yang kita buat pada Laravel. Pada routes.php tambahkan perintah sebagai berikut:

Route::get('/', function()
{
    dd(App::make('TelevisiInterface'));  
});

Jika sekarang akses route tersebut, maka akan tampil error sebagai berikut pada browser:

Illuminate \ Container \ BindingResolutionException Target [TelevisiInterface] is not instantiable.

Hal ini disebabkan karena kita harus melakukan bind terlebih dahulu terhadap interface yang kita buat. Untuk itu tambahkan kode untuk melakukan binding sebagai berikut:

App::bind('TelevisiInterface', 'Samsung');
Route::get('/', function()
{
    dd(App::make('TelevisiInterface'));  
});

Setelah itu, anda bisa memanggil method yang ada pada class Samsung sebagai berikut:

App::bind('TelevisiInterface', 'Samsung');
Route::get('/', function()
{
    $tv = App::make('TelevisiInterface');  
    $tv->hidupkan();
    $tv->matikan();
    $tv->ganti saluran();
});

Berikut kode lengkap untuk interface yang barusan kita buat:

<!-- Buat Interface -->
interface TelevisiInterface {
    public function hidupkan();
    public function matikan();
    public function gantisaluran();
}

<!-- Implementasikan interface pada class Samsung -->
class Samsung implements TelevisiInterface {
    public function hidupkan() {
        echo 'Televisi dihidupkan';
    }
    public function matikan()  {
        echo 'Televisi dimatikan';
    }
    public function gantisaluran() {
        echo 'Saluran diganti';
    }
}

<!-- Gunakan Interface -->
App::bind('TelevisiInterface', 'Samsung');
Route::get('/', function()
{
    $tv = App::make('TelevisiInterface');  
    $tv->hidupkan();
    $tv->matikan();
    $tv->ganti saluran();
});

Contoh Lain

Sekarang jika anda ingin membuat sebuah class televisi baru dengan nama misalnya Toshiba. Maka anda tidak perlu membuat interface baru, tinggal anda implementasikan TelevisiInterface pada class toshiba tersebut.
Kemudian ubah pula kode untuk binding menjadi App::bind('TelevisiInterface', 'Toshiba');

<!-- Buat Interface -->
interface TelevisiInterface {
    public function hidupkan();
    public function matikan();
    public function gantisaluran();
}

<!-- Implementasikan interface pada class Toshiba -->
class Toshiba implements TelevisiInterface {
    public function hidupkan() {
        echo 'Televisi Toshiba dihidupkan';
    }
    public function matikan()  {
        echo 'Televisi Toshiba dimatikan';
    }
    public function gantisaluran() {
        echo 'Saluran Televisi Toshiba diganti';
    }
}

<!-- Gunakan Interface -->
App::bind('TelevisiInterface', 'Toshiba');
Route::get('/', function()
{
    $tv = App::make('TelevisiInterface');  
    $tv->hidupkan();
    $tv->matikan();
    $tv->ganti saluran();
});

Semoga bermanfaat.

Laravel Wallpapper