Apa yang terjadi ketika Anda memberikan nama yang sama pada dua file dalam satu folder? Terntu komputer akan memunculkan peringatan bahwa file dengan nama tersebut sudah ada. Konsep namespace pada PHP sebenarnya sesederhana ini. Nama file adalah nama class, sedangkan folder adalah ruang lingkup/space tempat file-file itu berada. Jika ada dua class/lebih yang memiliki nama sama dan berapa pada space/konteks yang sama, maka akan terjadi name collision.
Seiring dengan perkembangan, proyek yang Anda kerjakan tumbuh menjadi lebih kompleks. Untuk alasan tertentu, Anda tidak bisa menghindari untuk memasukkan library/paket dari luar ke proyek yang sedang Anda kerjakan. Menggunakan library dari pihak ketiga adalah pilihan yang cerdas dan bisa menghemat waktu pembuatan sebuah aplikasi.
Walaupun memakai library pihak ketiga memiliki keuntungan, tapi saat mengintegrasikan library tersebut ke dalam aplikasi yang kita bangun terkadang kita memiliki kendala. Salah satunya adalah name collision, yaitu ketika 2 class dalam space yang sama memiliki nama yang sama pula. Sama seperti ilustrasi file dan folder di awal.
PHP5.3 menambahkan fitur namespace untuk mengatasi masalah tersebut. Di bab ini Anda akan mempelajari cara mendefinisikan namespace pada class, kemudian cara mengamil class yang sudah berada pada namespace tersebut.
Contoh sebelum menggunakan namespace yang menghasilkan dua kalimat berikut
Jarak maksimum Toyota Fortuner adalah 100 km
<? php
class Calculator
{
protected $mobil;
public function __construct(Mobil $mobil)
{
$this->mobil = $mobil;
}
public function hitungJarak()
{
$bbm = $this->mobil->getBbm();
$efisiensi = $this->mobil->getEfisiensi();
$jarakMaks = $bbm * $efisiensi;
return $jarakMaks;
}
}
abstract class Mobil
{
protected $merk = '';
protected $bbm = 0;
public function __construct(string $merk, int $bbm)
{
$this->merk = $merk;
$this->bbm = $bbm;
}
public function getMerk()
{
return $this->merk;
}
public function getBbm()
{
return $this->bbm;
}
abstract public function getEfisiensi();
}
class Toyota extends Mobil
{
protected $efisiensi = 10;
public function getEfisiensi()
{
return $this->efisiensi;
}
}
class Honda extends Mobil
{
protected $efisiensi = 15;
public function getEfisiensi()
{
return $this->efisiensi;
}
}
$toyota = new Toyota('Toyota Fortuner', 10);
$calculator = new Calculator($toyota);
echo "Jarak maksimum ".$toyota->getMerk() . " adalah " . $calculator->hitungJarak() . " km </br>";
$honda = new Honda('Honda C-RV', 10);
$calculator = new Calculator($honda);
echo "Jarak maksimum ". $honda->getMerk() . " adalah " . $calculator->hitungJarak(). " km </br>";
? >
Pada dasarnya, pada file code di atas kita memiliki class Calculator{}, abstract class Mobil{}, serta class Toyota{} dan Honta{} yang merupakan turunan dari class Mobil{}. Class Calulator{} kita pakai untuk menghitung jarak terjauhjarakMak yang dapat ditempuh oleh jenis mobil tertentu, yang direpresentasikan ke dalam class-class tersebut.
Kenyataanya, kode program pada aplikasi PHP tidak hanya ditulis pada satu file. Sebuah aplikasi dibangun dari banyak file. Apalagi memakai teknik OOP.
Komunitas PHP telah memiliki standar/aturan yang dikenal dengan PSR-Standar(PHP Standard Recomendation). Tujuannya Untuk membentuk aturan baku agar kode PHP lebih mudah dipertukarkan. Aturan- aturan itu terbagi mendaji beberapa standar, meliputi penamaan file, penamaan class, penulisan variabel, dan sebagainya. Di antara standar itu terdapat PSR-4, standar yang meliputi autoloading, yang di dalamnya menyebutkan bahwa sebuah class harus disimpan pada filenya masing-masing. Selain itu, nama class harus sama dengan nama file. Aturan penamaan class dan nama file ini akan sangat berguna saat kita melakukan autoloading dengan composer.
Agar kode yang kita buat memenuhi PSR Standard, kita harus mengubah susunan file dan folder untuk pembuatan kode di atas. Kita akan membagi isi code di atas dan menyimpanya di filenya masing-masing. Ikuti Langkah berikut:
Buat folder dengan nama namespace/src
Pada aplikasi PHP Modern, folder src dipakai untuk menyimpan file yang kita buat. Ini berhubungan dengan penggunaan composer sebagai package manager. Kita akan membahasnya pada bab autoloading composer secara detail
Buat file bernama Calculator.php, simpan dalam folder src
Buat folder bernama Mobil sehingga kita punya path namespace/src/Mobil
Buat file bernama Mobil.php simpan di namespace/src/Mobil. Isi file tersebut dengan bagian class Mobil{} seperti berikut:
Buat file bernama Toyota.php, simpan di namespace/src/Mobil. Isi file tersebut dengan bagian class Toyota{} seperti berikut:
Buat file bernama Honda.php, simpan di namespace/src/Mobil. Isi file tersebut dengan bagian class Honda{} seperti berikut:
Buat file bernama index.php, simpan di namespace. Isi file tersebut dengan kode berikut:
Sampai langkah ini, seharusnya kita sudah memiliki file dan folder seperti berikut:
Jalankan skrip index.php untuk mengeksekusi hasil latihan namespase
Jika berhasil, Perhatikan. Sekarang untuk mengeksekusi aplikasi, kita menjalankan file index.php.
File index.php
ini akan memanggil semua resource yang diperlukan untuk memulai aplikasi. pada framework PHP modern,
index.php dikenal dengan istilah front conrtoller.