فضای نام (Namespace) در PHP یک قابلیت برای گروهبندی کلاسها، توابع و ثابتها است تا از تداخل نام (Name Collision) جلوگیری کند. مثل کشوهای یک کمد که هر کشو متعلق به دستهای خاص است.
کاربردهای Namespace:
1- جلوگیری از تداخل نام کلاس/توابع/ثابت ها در پروژههای بزرگ.
2- سازماندهی کدها به صورت ماژولار.
3- امکان استفاده همزمان از کتابخانههای شخص ثالث بدون نگرانی از تداخل نام.
4-سازگاری با اتولودینگ استاندارد (مثل PSR-4).
مثال:
namespace App\Controllers;
در این مثال یک namespace با نام App\Controllers تعریف شده و کلاس UserController را در بر گرفته است.
حالا برای استفاده از UserController در یک فایل یا نیم اسپیس دیگر کافی است به صورت زیر عمل کنیم:
$user = new \App\Controllers\UserController();
این به این معنی است که کلاس UserController از نیم اسپیس App\Controllers فراخوانی شود.
کلمه کلیدی use:
کلمه کلیدی use به شما این امکان را می دهد تا یک بار، یک کلاس، از یک namespace را، use کنید و دفعات بعدی تنها نام کلاس را بدون namespace بنویسید:
use App\Controllers\UserController;
این کار باعث کوتاهی و خوانایی کد در استفاده های مکرر از یک کلاس می شود.
نام های مستعار:
این ویژگی به شما این امکان را می دهد که یک کلاس را با نام مستعار use کنید:
use App\Controllers\UserController as UC;
این کد کلاس App\Controllers\UserController را با نام UC در دسترس قرار می دهد.
استفاده از چندین namespace در یک فایل:
به طور کلی تنها یک namespcae برای هر فایل توصیه می شود، اما PHP این امکان را می دهد که چندین namespace را در یک فایل بنویسید:
namespace Project1 {
خلاصه نویسی use ها:
در صورتی که چندین کلاس از یک namespace را نیاز دارید می توانید دستور use را به طور خلاصه تر بنویسید:
use App\Controllers\{UserController, OrderController};
استفاده در Autoloading:
با Namespaceها میتوانید اتولودینگ را بر اساس ساختار فایلها پیادهسازی کنید:
spl_autoload_register(function ($className) {
در این صورت ساختار پوشه های پروژه باید با namespace ها مطابقت داشته باشند، مثلا
# app/Controllers/UserController.php
قوانین و محدودیتها:
اعلام Namespace باید اولین خط کد (پس از امکان تعریف چند Namespace غیر براکتدار در یک فایل وجود ندارد.
استفاده برای توابع و ثابت ها:
تمامی قوانین و موارد برای توابع و ثابت ها یکسان است با این تفاوت که برای use کردن توابع از کلمه کلیدی use function استفاده می شود:
namespace MyNamespace;
Namespace ها ابزاری ضروری برای مدیریت پیچیدگی در پروژههای PHP هستند. با استفاده از آنها، کدتان تمیزتر، قابل نگهداریتر و حرفهایتر خواهد شد.
🔖 #PHP, #پی_اچ_پی
👤 AmirHossein
💎 Channel: @DevelopixPHP