کاربردهای Namespace:
1- جلوگیری از تداخل نام کلاس/توابع/ثابت ها در پروژههای بزرگ.
2- سازماندهی کدها به صورت ماژولار.
3- امکان استفاده همزمان از کتابخانههای شخص ثالث بدون نگرانی از تداخل نام.
4-سازگاری با اتولودینگ استاندارد (مثل PSR-4).
مثال:
namespace App\Controllers;
class UserController {
public function index() {
return "User Dashboard";
}
}
در این مثال یک namespace با نام App\Controllers تعریف شده و کلاس UserController را در بر گرفته است.
حالا برای استفاده از UserController در یک فایل یا نیم اسپیس دیگر کافی است به صورت زیر عمل کنیم:
$user = new \App\Controllers\UserController();
echo $user->index();
این به این معنی است که کلاس UserController از نیم اسپیس App\Controllers فراخوانی شود.
کلمه کلیدی use:
کلمه کلیدی use به شما این امکان را می دهد تا یک بار، یک کلاس، از یک namespace را، use کنید و دفعات بعدی تنها نام کلاس را بدون namespace بنویسید:
use App\Controllers\UserController;
$user = new UserController();
echo $user->index();
این کار باعث کوتاهی و خوانایی کد در استفاده های مکرر از یک کلاس می شود.
نام های مستعار:
این ویژگی به شما این امکان را می دهد که یک کلاس را با نام مستعار use کنید:
use App\Controllers\UserController as UC;
$user = new UC();
این کد کلاس App\Controllers\UserController را با نام UC در دسترس قرار می دهد.
استفاده از چندین namespace در یک فایل:
به طور کلی تنها یک namespcae برای هر فایل توصیه می شود، اما PHP این امکان را می دهد که چندین namespace را در یک فایل بنویسید:
namespace Project1 {
class Logger { /* ... */ }
}
namespace Project2 {
class Logger { /* ... */ }
}
namespace { // Global space
$log1 = new Project1\Logger();
$log2 = new Project2\Logger();
}خلاصه نویسی use ها:
در صورتی که چندین کلاس از یک namespace را نیاز دارید می توانید دستور use را به طور خلاصه تر بنویسید:
use App\Controllers\{UserController, OrderController};استفاده در Autoloading:
با Namespaceها میتوانید اتولودینگ را بر اساس ساختار فایلها پیادهسازی کنید:
spl_autoload_register(function ($className) {
$path = str_replace('\\', '/', $className) . '.php';
require_once $path;
});در این صورت ساختار پوشه های پروژه باید با namespace ها مطابقت داشته باشند، مثلا
# app/Controllers/UserController.php
namespace App\Controllers\UserController;
// ...
قوانین و محدودیتها:
اعلام Namespace باید اولین خط کد (پس از <?php) باشد (به جز declare).
امکان تعریف چند Namespace غیر براکتدار در یک فایل وجود ندارد.
استفاده برای توابع و ثابت ها:
تمامی قوانین و موارد برای توابع و ثابت ها یکسان است با این تفاوت که برای use کردن توابع از کلمه کلیدی use function استفاده می شود:
namespace MyNamespace;
function test() {
echo "Test\n";
}
// Another File or Namespace:
use function MyNamespace\test;
test();
Namespace ها ابزاری ضروری برای مدیریت پیچیدگی در پروژههای PHP هستند. با استفاده از آنها، کدتان تمیزتر، قابل نگهداریتر و حرفهایتر خواهد شد.
🔖 #PHP, #پی_اچ_پی
👤 AmirHossein
💎 Channel: @DevelopixPHP