PHP OOP Part-2: Constructor and Destructor

Jamir Hossain
3 min readNov 28, 2023

--

প্রথমেই আমরা জানার চেষ্টা করব যে Constructor কি? এক কথায় বললে Constructor হলো পিএইচপির একটি ম্যাজিক মেথড। তাই Constructor সম্পর্কে বিস্তারিত জানার জন্য প্রথমেই আমরা একটি কোডের উদাহরণ লক্ষ্য করি।

class Car
{
public $name;
public $color;

public function setValue(string $name, string $color)
{
$this->name = $name;
$this->color = $color;
}

public function getValue()
{
echo "Car name: $this->name\n";
echo "Car color: $this->color\n";
}
}

$toyota = new Car;
$toyota->setValue('Toyota', 'Red');
$toyota->getValue();

উপরের উদাহারণ এবং বা আগের পর্বের উদাহরণে আমরা যেভাবে অবজেক্টের value set করেছি একে বলা হয় Setter Methos অর্থাৎ কোন একটি ক্লাসের অবজেক্ট তৈরি করার পর সেই অবজেক্টের কোন একটি মেথরের সাহায্যে যদি আমরা ভ্যালু সেট করি তখন তাকে Setter Methos বলা হয় কিন্তু আমরা চাইলে এই যে ভ্যালু সেটের প্রক্রিয়াটা সেটা আরো সহজভাবে করতে পারি পিএইচপির Built in Magic Method এর সাহায্যে। যাকে আমরা Class এর constructor বলে থাকি। এই constructor কে PHP তে __construct() দিয়ে define করা হয়।

নিচের উদাহারণ টি লক্ষ করা যাক।

class Car
{
public $name;
public $color;

function __construct(string $name, string $color)
{
$this->name = $name;
$this->color = $color;
}

public function getValue()
{
echo "Car name: $this->name\n";
echo "Car color: $this->color\n";
}
}

$toyota = new Car('Toyota', 'Red');
$toyota->getValue();

এই উদাহারণ এ আমরা setValue মেথড এর পরিবর্তে __construct() মেথড ব্যবহার করেছি। এখন __construct() মেথড ব্যবহার করে আমাদের লাভ কি হলো? পুর্বের উদাহারণ এ Car class এর Object তৈরি করার পরে setValue method এর মাধ্যমে প্রতিটা car এর value pass করতে হচ্ছিল। কিন্তু এখন __construct() ব্যবহার এর ফলে Car class এর Object তৈরি করার সময়ই car এর value pass করে দিতে পারতেছি এখানে আমাদের কে অতিরিক্ত method call করতে হচ্চে না।

কিন্তু এখন প্রশ্ন আসতে পারে যে __construct() তো আমরা call করিনি তাহলে সে কিভাবে value receive করল এবং variable এ set করল ?

new Car('Toyota', 'Red');

যখন আমরা class এর মধ্যে __construct() ব্যবহার করি আর সেই __construct() যদি বাইরে থেকে কোনো value receive করে তাহলে সেই class এর object create করার সময় first bracket দিয়ে তার মধ্যে আমরা value pass করতে পারি। যখনি এই ভাবে class এর object create করি ঠিক তখনি __construct() মেথড automatically call হয়ে যায়। অর্থাৎ যখন কোনো class এর instance create করি ঠিক তখনি __construct method call হয়ে যায়। যেহেতু __construct() একটি ম্যাজিক মেথড তাই পিএইচপিতে ম্যাজিক মেথড গুলোকে আলাদাভাবে কল করতে হয় না এগুলো বিভিন্ন Scenario তে নির্দিষ্ট কিছু কাজ করার জন্য automatically run হবে।

What is Destructor?

এটিও পিএইচপির একটি ম্যাজিক মেথড। ****যখন আমরা ক্লাসের সাহায্যে কোন অবজেক্ট ক্রিয়েট করি তখন সেই অবজেক্ট এর মাধ্যমে আমরা বিভিন্ন ধরনের কাজ করে থাকি। কিন্তু যখন ওই অবজেক্টের সমস্ত কাজ শেষ হয়ে যায় অর্থাৎ অবজেক্ট টা Destroy হয়ে যায় ঠিক তখন destructor কাজ করে। এই destructor কে PHP তে __destruct() দিয়ে define করা হয়। কিন্তু এখানে মনে রাখতে হবে যে যদি আমরা একটি ক্লাসের সাহায্যে যদি একাধিক অবজেক্ট তৈরি করি তাহলে ওই সবগুলো অবজেক্টের কাজ শেষ হওয়ার পরে __destruct() মেথড কল হবে এক্ষেত্রে এই ক্লাসের সাহায্যে যতগুলো অবজেক্ট তৈরি করা হবে ঠিক ততবার __destruct() মেথড call হবে।

নিচের উদাহারণ টি লক্ষ করা যাক।

class Car
{
public $name;
public $color;

function __construct(string $name, string $color)
{
$this->name = $name;
$this->color = $color;
}

public function getValue()
{
echo "Car name: $this->name\n";
echo "Car color: $this->color\n";
}

function __destruct()
{
echo "I have called\n";
}
}

$toyota = new Car('Toyota', 'Red');
$toyota->getValue();

$tesla = new Car('Zip', 'Blue');
$tesla->getValue();

এই কোড যদি আমরা রান করি তাহলে আমরা নিচের আউটপুট দেখতে পাবো।

Car name: Toyota
Car color: Red
Car name: Zip
Car color: Blue
I have called
I have called

এখন প্রশ্ন আসতে পারে যে এই __destruct() মেথড আমরা কোন কোন ক্ষেত্রে ব্যবহার করব? যখন আমরা কোন ফাইল অথবা ডাটাবেজ নিয়ে কাজ করব তখন আমাদেরকে ফাইল অথবা ডাটাবেজকে ওপেন করতে হয় কিন্তু যখন আমাদের কাজ শেষ হয়ে যাবে তখন আমাদেরকে সেই ফাইল অথবা ডাটাবেজকে আবার ক্লোজ করতে হয়। আর এই ক্ষেত্রে আমরা __destruct() মেথড ব্যবহার করতে পারি। এছাড়াও __destruct() মেথড এর আরও অনেক real life use case রয়েছে।

আশা করি __construct() এবং __destruct() সম্পর্কে আমাদের কিছুটা ধারণা হয়েছে। এই __construct() এবং __destruct() method ছাড়াও আরও কিছু গুরুত্বপুর্ণ magic method রয়েছে। যেমনঃ __call(), __callStatic() ইত্যাদি। আমরা চাইলে এই method গুলাও ব্যবহার করতে পারি যেগুলো Class এর মধ্যে বিভিন্ন Scenario তে নির্দিষ্ট কিছু কাজ করে থাকে।

তাহলে আজ এই পর্যন্তই, কথা হবে পরবর্তী লেছনে।

--

--