Ukieweb

Diary

I write here what I learn

OOP : Constructor & Destructor

OOP : Constructor & Destructor

সবাইকে আজকের লেখায় স্বাগতম। আগের লেখায় আমরা জেনেছিলাম Object Oriented Programming : Object & Class. আজকে জানবো ক্লাসের ConstructorDestructor কি এবং কেনো আমরা ব্যবহার করবো ও কিভাবে ব্যবহার করবো এসকলের বিস্তারিত ধারনা।

আমরা অনেকেই প্রয়োজনে-অপ্রয়োজনো, জেনে বা না জেনে, বুঝে বা না বুঝে প্রায়সই এগুলি ব্যবহার করে থাকি। Object Oriented Programming এ ConstructorDestructor খুবই প্রয়োজনীয় দুটি ফিচার যা আপনার ডেভলপমেন্ট কার্ভকে আরো সহজ করে দিবে।

এদুটো মেথড হলো PHP’র স্পেশাল টাইপ মেথড অথবা Magic Method.

Constructor

ধরুন আপনি প্রতিদিন অফিস করেন এবং প্রতিদিনই আপনাকে অফিসে গিয়েই প্রথমে যে কাজটি করতে হয় তাহলো হাজিরা বইতে স্বাক্ষর দেয়া। প্রতিদিন অফিসের সকল কাজ শুরুর পূর্বেই আপনাকে এ কাজটি করে নিতে হবে। অন্যথায় আপনার দিনের সমস্থ কাজ করা সত্যও অফিস আপনাকে ঐদিন অনুপস্থিত হিসেবে গন্য করবে। তারমানে আপনাকে প্রতিদিন অফিসে এসেই ইনিশিয়াললি(শুরুতেই) হাজিরা দিয়ে নিতে হবে। কারন দিনের সকল কাজের দলিল নির্ভর করে এই হাজিরার উপর। আর প্রতিদিন অফিসের শুরুতেই যে কাজটি আমরা করি এটিই হলো Construtor. তাহলে class এর ক্ষেত্রে এটি হলো যখন কোনো Class Instantiate করি অর্থাৎ ক্লাস থেকে যখন নতুন কোনো অবজেক্ট তৈরী করি ঠিক তখনই যদি কোনো মেথড এক্সিকিউট করাই সেটিই হলো Constructor. Constructor অর্থ নির্মাতা, তারমানে হলো যখন নতুন একটি ক্লাস নির্মান করা হয় এবং যে নির্মান করে সেই হলো Constructor :D . Constructor মূলত class এর Initialisation এর সময় কাজ করে।

আমরা আগের পর্বে Man ক্লাস নিয়ে কাজ করেছি। যেখানে Man ক্লাসের চারটি মেথড ছিলো। সেখানে দেখেছি কিভাবে Man এর নতুন object তৈরী করা যায়। আমরা সেখানে $nahid$firoz নামে দুটি Man এর object তৈরী করেছিলাম। কিন্তু আমরা জানিনা এ মানুষদুটো ছেলে নাকি মেয়ে। তাহলে এখন কি দরকার? হ্যা এর লিঙ্গ নির্ধারন করা, স্বাধারনত এ কাজটি কখন হয়? এটি হয় সাধারনত কোনো মানুষ তৈরী হবার সাথে সাথেই অর্থাৎ শুরুতেই। আমরাও ঠিক এ কাজটিই করবো, মানুষ object তৈরীর সাথে সাথেই এর লিঙ্গ নির্ধারন করে দিব। তো চলুন আগের ক্লাসটির সাথে একটি Constructor যুক্ত করে দেখি কিভাবে এটি কাজ করে

class Man
{
    var $gender;

    function __construct($sex)
    {
	$this->gender=$sex;
    }
	
    function hand($substance){
	return 'I grab the '.$substance;
    }

    function leg($path)
    {
	return 'I go to '.$path;
    }

    function mouth($food)
    {
	return 'I eat '.$food;
    }

    function eye($object)
    {
	return 'I watch '.$object;
    }
}

এখানে Man ক্লাসে Constructor যুক্ত করেছি ও একটি প্রোপার্টিজ ‍var $gender নিয়েছি। PHP তে __construct() হলো একটি স্পেশাল টাইপ অব মেথড বা Magic Method. যেহেতু এটি PHP নিজস্ব একটি মেথড যার অর্থ হলো আপনি কোনো ক্লাসের মেথডের নাম __construct() দিতে পারবেন না। Magic Method নিয়ে আমরা অন্য কোনো একসময় আলোচনা করবো। নিচের কোডটি খেয়াল করুন কিভাবে ইনিশিয়ালিজেশনের সময় Constructor এ ভ্যালু পাঠাই

$nahid = new Man('male');

$nahid নামে নতুন একটি Man object নিয়েছি যাতে শুরুতেই একটি ভ্যালু পাঠিয়েছি male. অবজেক্ট তৈরীর সময় class এ কোনো আর্গুমেন্ট পাঠালে সেটি কন্সট্রাটরে পৌছে। উপরের কোড লেখার ফলে Constructor male ভ্যালুটি পাবে এবং var $gender প্রোপার্টিজে male ভ্যালুটি এসাইন করবে। এখন যদি আমরা এ অবজেক্ট থেকে যেকোনো জায়গায় $gender কে কল করি তবে ক্লাসের অবজেক্ট তৈরীর সময় যে ভ্যালু পাস করেছি সেটি পাবো যেহেতু এখানে male পাঠিয়েছি সেহেতু আমরা male পাবো

echo $nahid->gender;

Output

male

অর্থাৎ শুরুতেই আমরা এর লিঙ্গ object তৈরীর সময় বলে দিয়েছি তাই যখনই আমরা এর নাম ধরে লিঙ্গ জানতে চাইবো প্রোগ্রাম আমাকে তার gender রিটার্ন করবে।

Destructor

এবার তাহলে আসি Destructor এর কথায়। Destructor হলো Constructor এর ঠিক উল্টো অর্থাৎ Constructor যেমন অবজেক্ট তৈরীর সময় এক্সিকিউট হয় আর Destructor অবজেক্ট যখন Destroy হয় বা অবজেক্টের যখন মৃত্যু হয় ঠিক তখন Destructor কাজ করে।

এতোক্ষন আমরা মানুষ তৈরী করেছি, তার লিঙ্গ নির্ধারন করেছি কিন্তু এবার একে মেরে ফেলবো :( . আমরা সবাই বাংলা সিনেমা দেখেছি, সিনেমার শেষে একটা কমন ঘটনা হয়, নাইকার বাবা মারা যাওয়ার আগে নাকয়কে বলে যায় "আমার মেয়েকে তোমার হাতে তুলে দিলাম, তুমি ওকে দেখে রেখো, আ.. আ.. আহ" শেষ। তো আমরাও Man ক্লাসে একটি Destructor যুক্ত করবো যেটি মারা যাওয়ার সময় উপরের ডায়লগটা দিবো.

class Man
{
	function hand($substance){
		return 'I grab the '.$substance;
	}

	function leg($path)
	{
		return 'I go to '.$path;
	}

	function mouth($food)
	{
		return 'I eat '.$food;
	}

	function eye($object)
	{
		return 'I watch '.$object;
	}

	function __destruct()
	{
		echo 'Amar meyeke tomar haate tule dilam. oke dekhe rekho Aa.. Aa.. Aah';
	}
}

PHP তে Destructor __destruct() নামে তৈরী করতে হয়, এটিও একটি Magic Method. এবার আমরা নিচের উধাহরনটি দেখি

$nahid = new Man('male');
echo $nahid->eye('TV').'<br/>';

Output

I watch TV

Amar meyeke tomar haate tule dilam. oke dekhe rekho Aa.. Aa.. Aah

দেখুন আমরা এখানে শুধু $nahid->eye() কে কল করেছি কন্তু সবার শেষে __destruct() method টি ও execute হয়েছে। অর্থাৎ যখন object টি destroy হবে ঠিক তখনই __destruct() এক্সিকিউট হয়েছে।

এবার খুশি?

এতোক্ষন যে বিষয় নিয়ে বকরবকর করলাম এগুলোই হলো ConstructorDestructor , অকা?

6 Comments

16/11/2015

চমৎকার , স্বচ্ছ একটা ধারণা পাইলাম ।

16/11/2015

চমৎকার

16/11/2015

Hope it will be continue......with regular update.... আফনাকে আমার তরফ থেকে কাগজের একগুচ্ছ গোলাপ সাথে সুগন্ধ যেন বেশি দিন থাকে ...... :D

16/11/2015

হা হা সেন্ট মাইরা দিও ফুলে @Shipu :p

12/12/2015

__destruct() এর উপকারিতা বুঝলাম না। একটু যদি বুজাইতেন ভাউ :D

পরবর্তি লেখার অপেক্ষায় থাকলাম।

14/12/2015

উপকারিতা বলতে ধরুন আপনি চাচ্ছেন যখন কোনো অবজেক্ট destroy হবে তখন কোনো একটি কাজ করবেন, class কে সেইসময়ে ঐ কাজটিই __destruct() এর মাধ্যমে করাতে হয়। এটি __construct() এর ঠিক উল্টো

To make a comment you have to login