PHP Snippet : Mengenal Namespace

Haha malem malem mapir di webnya id-laravel dan nemuin artikel tentang namespace.. wkwk udah tau lama sih ni postingan, tapi baru sekarang saya mau re-post.. karna waktu itu belum punya blog ini :g. Jika kalian pernah belajar Java atau C#, maka namespace bukan merupakan hal baru. Tapi jika kalian seorang programmer fanatik PHP (saking fanatiknya tidak tertarik belajar bahasa pemrograman yang lain) maka namespace, yang baru muncul di PHP versi 5.3, merupakan mainan baru haha :v. Dan sebagaimana layaknya mainan baru, kita pasti penasaran apa sih yang bisa dilakukan mainan baru bernama namespace ini. So, mari kita jelajahi satu persatu bersama mantan saya.. :3

Apa Itu Namespace?

Apakah kalian pernah mengalami tidak bisa membuat sebuah class hanya karena namanya sudah dipakai di tempat lain? Apakah kalian pernah menulis kode seperti di bawah ini hanya untuk memastikan bahwa nama function yang kalian buat tidak bentrok dengan function di tempat lain? biasanya sih kalo pake framework ci pernah :D

if ( ! function_exists('terbilang')){
    function terbilang($number){
        //to do code here
    }
}

Atau kalian pernah menemukan nama class yang sangat panjang dan kelihatan seperti jemuran pakaian seperti ini:

class Zend_Cache_Backend_Apc extends Zend_Cache_Backend implements Zend_Cache_Backend_ExtendedInterface{
    ...
}

Jika kalian pernah mengalami salah satu kejadian di atas, maka kalian patut bersyukur sekarang karena bahasa yang kita cintai ini akhirnya mengijinkan kita untuk menjadi programmer yang lebih berkelas. Dengan namespace, kalian ga perlu takut function yang kalian buat memiliki nama yang sama dengan function yang lain. Dengan namespace, kalian bisa memberi nama class dengan lebih singkat dan jelas, tidak perlu lagi menambahkan prefix Embel_embel_ga_penting_. Dengan namespace, kalian bisa mengorganisis kode dengan lebih rapi dan terstruktur, sehingga lebih mudah di-maintenance.

Cara kerja namespace mirip dengan cara kerja folder dan file. Dalam satu folder kita tidak bisa membuat 2 buah file dengan nama yang sama. Tetapi hal tersebut bisa dilakukan jika foldernya berbeda. Misalnya kamu punya folder C:\Users\dadang dan C:\Users\icih, maka di masing-masing folder tersebut kalian bisa membuat file dengan nama yang sama, misalnya suratcinta.txt. Selanjutnya kalian bisa merefer kedua file tersebut dengan C:\Users\dadang\suratcinta.txt dan C:\Users\icih\suratcinta.txt. Jika tidak percaya silakan dicoba sendiri :) Namespace menjadi semacam pembungkus (encapsulation) untuk kode-kode di dalamnya, sehingga masing-masing kode memiliki identifier yang unik.

Bagaimana Membuat Namespace?

Untuk mempelajari bagaimana membuat namespace, mari kita praktekkan dengan contoh sederhana. Buat beberapa file php dengan struktur seperti berikut:

Meka
    -Student.php
Rpl
    -Student.php
index.php

dan berikut code yng terdapat dalam file file tersebut :

Meka/Student.php
<?php 
class Student {
	public function kenalan(){
		echo "Halo bro saya dari jurusan Mekatronika";
	}
}
Rpl/Student.php
class Student {
	public function kenalan(){
		echo "Halo bro saya dari jurusan Rekayasa Perangkat Lunak";
	}
}

dan ini untuk file yng di panggil

index.php
<?php 
include 'Rpl/Student.php';
include 'Meka/Student.php';

//dika anak jurusan RPL
$dika = new Student();
$dika->kenalan();

echo '<br />';

//andi anak jurusan Meka
$andi = new Student();
$andi->kenalan();

Jika kita jalankan file index.php, maka akan muncul error seperti berikut:

    Fatal error: Cannot redeclare class Student in C:\xampp\htdocs\snippet\namespace\Meka\Student.php on line 2

Yuhu mantan juga tau kalau kita ga boleh buat class dengan nama yang sama. Eits, tapi itu dulu pas bareng mantan. Sekarang hal tersebut mungkin dilakukan dengan menggunakan namespace. Saya ga tau apakah mantan mengikuti perkembangan PHP dan sudah mengetahui hal ini. :silly:

Untuk mengatasi error di atas, mari kita tambahkan namespace ke masing-masing class.

Meka/Student.php
    
<?php 
namespace Meka; //deklarasi namespace

class Student {

	public function kenalan(){
		echo "Halo bro saya dari jurusan Mekatronika";
	}
}
Rpl/Student.php
  
<?php 
namespace Rpl; //deklarasi namespace

class Student {

	public function kenalan(){
		echo "Halo bro saya dari jurusan Rekayasa Perangkat Lunak";
	}
}

Refresh browser nya coba bro, masih error ga? Haha pasti elor :v, sama seperti file suratcinta.txt tadi, ketika kalian menggunakan namespace (membungkus file dengan folder), maka untuk mengakses semua resource dalam namespace tersebut kalian harus menulisnya dengan full path. Pada contoh di atas, jika hanya ditulis Student saja maka akan terjadi kebingungan, yang dimaksud Student itu yang mana. Apakah Student itu yang ada di Meka atau Student yang ada di RPL?

Untuk itu kita modif sedikit file index.php menjadi seperti ini:

index.php
<?php 
namespace Rpl;

include 'Rpl/Student.php';
include 'Meka/Student.php';

//dika anak jurusan RPL
$dika = new \Rpl\Student();
$dika->kenalan();

echo '<br />';

//andi anak jurusan Meka
$andi = new \Meka\Student();
$andi->kenalan();

Coba refresh kembali browser kalian dan perhatikan hasilnya.

Halo bro saya dari jurusan Rekayasa Perangkat Lunak

Halo bro saya dari jurusan Mekatronika

Horeee selamat, kalian telah berhasil membuat namespace pertama kalian di PHP. Nih buat yang penasaran seperti saya, kenapa menggunakan karakter backslash '\' sebagai karakter penanda namespace, silakan baca penjelasan resmi dari PHP.

Nah segitu aja dulu, kalo mau liat yang lebih bisa ke websitenya id-laravel.com :D

Sampai jumpa di postingan berikutnya :)) Semoga bermanfaat :D

Download Hasil

Source : id-laravel.com