Monday 3 March 2014

Memahami Penggunaan dan Kegunaan Namespace pada PHP

namespace adalah keyword untuk memberi ruang (space) khusus pada memori yang mengisolasi penamaan dari luar. Artinya nama class atau function bisa saja sama selama berada di ruang namespace yang berbeda. Namespace merupakan fitur baru yang diperkenalkan pada php versi 5.3 yang kini juga telah digunakan oleh banyak framework PHP. Latar belakang digunakannya namespace yaitu :

1. Nama variable, class dan method harus memiliki indentifikasi yang unik atau tidak sama, pada penamaan variable yang sama mungkin tidak terjadi masalah, tetapi jika method dan class memiliki nama yang sama makan akan terjadi kesalahan atau error pada prose compile
2. Untuk menghindari duplikasi

Mendifiniskan Namespace

Namespace ini harus dideklarasikan di awal skrip sebelum baris kode lainnya, ada 2 cara yaitu :

Dengan kurung kurawal

namespace Name_Namespace{
//Kode disini
}

namespace Name_Namespace;

//Kode disini


Dalam satu file dapat membuat lebih dari 1 namespace.

Sub-Namespace

Namespace juga dapat digunakan secara hirarki menggunakan sub-namespace seperti halnya direktori tempat penyimpanan file. Bahkan untuk membuat skrip yang dibuat lebih terorganisir dan mudah dilacak, penggunaan sub-namespace sangat dianjurkan untuk menunjukkan letak file yang sesungguhnya. Contoh :

namespace Blog\Database;
 
class Connection {
    // Kode disini
}

Menggunakan Namespace

Ada tiga macam cara untuk menggunakan namespace, yaitu unqualified name, qualified name dan fully qualified name.

Unqualified name digunakan pada dua kondisi, yaitu pada saat menggunakan global namespace atau ketika kode yang menggunakan namespace berada di file yang sama, maka PHP akan menggunakan namespace yang aktif pada file tersebut, Contoh :

namespace Blog\Database;
 
class Connection {
 
}
 
$conn = new Connection()

Perhatikan baris $conn = new Connection();, PHP akan mengenali Connection() sebagai class dari namespace yang aktif yaitu Blog\Database, karena berada di file yang sama.

qualified name digunakan untuk menggunakan kode yang ada [ada file yang lain kedalam skrip. Contoh :

namespace Blog;
 
require_once "Blog/Database/Connection.php";
 
$conn = new Database\Connection()

Perlu diperhatikan bahwa dalam penggunaan jenis ini harus pada namespace yang aktif, perhatikan pada baris $conn = new Database\Connection(), pada kode tersebut otomatis yaitu akan menjadi Blog\Database\connection(), karena yang aktif ialah namespace Blog. Namun akan terjadi kesalahan jika yang terjadi bukan pada namespace yang tidak aktif, contohnya :

namespace Blog\Search;
 
require_once "Blog/Database/Connection.php";
 
$conn = new Database\Connection();

Maka yang terjadi sebenarnya ialah $conn = new Blog\Search\Database\Connection().

Fully qualified name menggunakan path namespace secara lengkap sehingga tidak peduli kode yang memanggil berada di namespace manapun. Contoh :

namespace Blog\Search;
 
require_once "Blog/Database/Connection.php";
 
$conn = new \Blog\Database\Connection();

Aliasing atau Importing

Pada aplikasi yang rumit yang menggunakan file dengan direktori bertingkat-tingkat mungkin penggunaan namespace seperti di atas menjadi tidak mudah. Untuk itu bisa menggunakan keyword use untuk meng-import dan sebagai alias. Contoh :

namespace MyProject;
 
use Aplikasi\Yang\Besar\Dan\Rumit\Connection;
use Aplikasi\Lain\Yang\Besar\Dan\Rumit\Config;
 
$conn = new Connection(); // menggunakan Aplikasi\Yang\Besar\Dan\Rumit\Connection
$config = new Config(); // menggunakan Aplikasi\Lain\Yang\Besar\Dan\Rumit\Config
$conn2 = new \Connection(); // ini akan menyebabkan error

Perlu diperhatikan kalau keyword use hanya berlaku untuk unqualified name dan qualified name, tapi tidak pada fully qualified name. Pada skrip di atas misalnya, Connection() akan menyebabkan error karena ini fully qualified name di mana PHP mencoba mencari pada namespace Connection

Keyword use juga bisa digunakan sebagai alias. Contoh :

namespace MyProject;
 
use Aplikasi\Yang\Besar\Dan\Rumit as NamespaceRumit;
use Aplikasi\Lain\Yang\Besar\Dan\Rumit\Connection;
 
$conn1 = new NamespaceRumit\Connection(); // menggunakan Aplikasi\Yang\Besar\Dan\Rumit\Connection
$conn2 = new Connection(); // menggunakan Aplikasi\Lain\Yang\Besar\Dan\Rumit\Connection

Pada skrip di atas, jika Anda ingin menggunakan class pada namespace yang aktif, pastikan menggunakan keyword namespace sebelum memanggil class, seperti contoh berikut :

namespace MyProject;
 
use Aplikasi\Yang\Besar\Dan\Rumit as NamespaceRumit;
use Aplikasi\Lain\Yang\Besar\Dan\Rumit\Connection;
 
class Connection {
 
}
 
$conn1 = new NamespaceRumit\Connection(); // menggunakan Aplikasi\Yang\Besar\Dan\Rumit\Connection
$conn2 = new Connection(); // menggunakan Aplikasi\Lain\Yang\Besar\Dan\Rumit\Connection
$conn3 = new namespace\Connection(); // menggunakan MyProject\Connection

Referensi dari :

http://www.0prek.com/

4 comments:

  1. wah rumit banget ya
    tapi makasih banget nih untuk pengetahuannya

    ReplyDelete
  2. kalo ada ebooknya share dong gan...heheheheh

    ReplyDelete
  3. kalo ada ebooknya share dong gan...heheheheh

    ReplyDelete
  4. Thanks banget gan, walau rumit lumayan nambah2 wawasan ;)

    ReplyDelete