Namespace mengorganisir kode PHP dan mencegah konflik penamaan antara class, fungsi, dan konstanta — sangat penting seiring berkembangnya aplikasi dan penggunaan paket pihak ketiga. Mereka berfungsi seperti direktori untuk nama class, dan terintegrasi dengan autoloading Composer (PSR-4).
Masalah yang diselesaikan namespace
Without namespaces, two classes named `User` (yours and a library's) would COLLIDE
("cannot redeclare class"). Namespaces give each a unique fully-qualified name.
Mendeklarasikan dan menggunakan namespace
<?php
// declare a namespace at the top of the file (matches the directory, PSR-4)
namespace App\Models;
class User { // fully-qualified name: App\Models\User
// ...
}
<?php
namespace App\Controllers;
use App\Models\User; // IMPORT a class so you can use its short name
use App\Services\Mailer as MailService; // import with an ALIAS
class UserController {
public function index() {
$user = new User(); // short name works thanks to the `use` import
// or use the fully-qualified name: new \App\Models\User();
}
}
Sebuah file mendeklarasikan namespace, dan file lain use (import) class untuk merujuk kepada mereka dengan nama singkat. Nama yang sepenuhnya qualified (\App\Models\User) bersifat unik secara global.
Namespace memetakan ke direktori (PSR-4)
Namespace File path
App\Models\User → src/Models/User.php
App\Services\Mailer → src/Services/Mailer.php
→ PSR-4 autoloading: the namespace structure mirrors the folder structure, so
Composer can find and load each class automatically (no manual require).
Mengimport fungsi, konstanta, dan namespace global
use function App\Helpers\format; // import a function
use const App\Config\VERSION; // import a constant
\strlen("x"); // a leading \ = the GLOBAL namespace (built-in functions)
Mengapa ini penting
Namespace sangat penting untuk mengorganisir kode PHP modern dan merupakan fondasi bagaimana seluruh ekosistem bekerja.
Memahami namespace penting karena mereka menyelesaikan masalah kritis dari konflik penamaan — tanpa namespace, class Anda akan bertabrakan satu sama lain dan dengan banyak paket pihak ketiga yang digunakan aplikasi nyata (dua class User tidak bisa bersama-sama), membuat aplikasi besar dan ekosistem paket menjadi tidak mungkin.
Namespace memberikan setiap class nama yang unik dan sepenuhnya qualified, dan import use memungkinkan Anda merujuk class dengan nama singkat secara bersih.
Yang paling penting, namespace terintegrasi dengan autoloading Composer via PSR-4, di mana struktur namespace mencerminkan struktur direktori sehingga class dimuat secara otomatis saat dibutuhkan — ini adalah fondasi struktur proyek PHP modern dan manajemen dependensi.
Karena setiap framework PHP modern, paket, dan aplikasi diorganisir dengan namespace (dan Anda tidak bisa menggunakan paket Composer tanpa memahaminya), mengetahui cara mendeklarasikan namespace, mengimport class dengan use, dan bagaimana mereka memetakan ke direktori untuk autoloading adalah pengetahuan fundamental dan sehari-hari untuk pengembangan PHP modern.
Namespace, Composer, dan autoloading PSR-4 bersama-sama mendefinisikan bagaimana proyek PHP kontemporer distruktur.
