নেমস্পেস - Namespace


নেমস্পেস কি?

নেমস্পেস মুলত ডিরেক্টরি বা ফাইল নির্দেশক ।

নেমস্পেস সম্পর্কে বিস্তারিত

নেমস্পেস সম্পর্কে একটা গল্প - রবি আর সুজা দুই ভাই , তারা দুজনে একই ক্লাসে পরে । তাদের মাঝে খুব ঝগড়া হয় , বিশেষ করে কলম নিয়ে । কারন তারা তাদের পড়ার জিনিস পত্র একই ডেস্কের ড্রয়ারে রাখে । কলম একই কালার এর হওয়ার জন্য কে কার কলম ববহার করছে বুঝতে পারে না । এই সমস্যা সমাধানের জন্য রবির বাবা তাদের কলম এ লাবেল লাগিয়ে দেয় । এতে আর সমস্যা হয় না । বলা যায়
নেমস্পেস এক ধরনের লাবেল বা স্টিকার

আপানার লারাভেল প্যাকেজে বা অন্য যেকোনো পি এইচ পি ডেভেলপমেন্ট প্রোজেক্ট এ যদি একই নামে একাধিক function , class , interface , constant , trait , abstract থাকে তখন সমস্যা সৃষ্টি হবে । কোন টা ব্য্যবহার হচ্ছে সেটা ফিক্স করা সম্ভব না । এই সমস্যা সমাধানের জন্য নেমস্পেস ব্যবহার করা হয় ।

নেমস্পেস কে প্রকাশ করা হয় namespace দিয়ে । পিএইচপি (PHP) / লারাভেল (Laravel) এর সকল ফাইল এর উপরে (top) এ
নেমস্পেস (namespace) ব্যবহার করতে হয় । উদাহরণ namespace App\Http\Controllers; সাব-নেমস্পেস ব্যাকস্লাশ (\) দিয়ে পৃথক করা হয় ।

laravel এর একটি ফাইল একটা নেমস্পেস হবে । বাকি গুলা use ব্যবহার করে নেমস্পেশ দেখাতে হবে ।

নেমস্পেস ইমপোর্ট (importing/aliasing)

নেমস্পেসের মাধ্যমে ইমপোর্ট করা হয় use operator দিয়ে । লারাভেল প্যাকেজ এর ডিফল্ট Controller এর কোড ।

<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}
use Illuminate\Routing\Controller as BaseController;

as দিয়ে aliasing নেমস্পেস ইমপোর্ট করা হয় । Illuminate\Routing\Controller এর ডাক-নাম BaseController
তাই Illuminate\Routing\Controller এর পরিবর্তে BaseController নামে extends(class Controller extends BaseController) করে Illuminate\Routing\Controller এর সব কিছু চাইল্ড পেয়েছে ।

extends , implements , traits

অবজেক্ট ওরিয়েন্ট প্রোগ্রামিং ল্যাঙ্গুয়েজ এ extends , implements পড়েছেন । পি এইচ পি তে স্পেশাল traits । এই তিনটা টপিক জানা না থাকলে দেখে নিবেন ।

অন্যান্য ল্যাঙ্গুয়েজে মাল্টিপল ইনহেরিটান্স সম্ভব কিন্তু পি এইচ পি তে মাল্টিপল ইনহেরিটান্স সাপোর্ট করে না । মাল্টিলেভেল ইনহেরিটান্স সাপোর্ট করে । মাল্টিপল ইনহেরিটান্স এর কাজ traits দিয়ে করতে পারবেন ।

<?php
trait Hello {
public function sayHello() {
echo 'Hello ';
}
}
trait World {
public function sayWorld() {
echo 'World';
}
}
class MyHelloWorld {
use Hello, World;
public function sayExclamationMark() {
echo '!';
}
}
$o = new MyHelloWorld();
$o->sayHello();
$o->sayWorld();
$o->sayExclamationMark();
?>