Object এবং Class সম্পর্কে জানার আগে চলুন দেখে আসি Object Oriented Programming কি?
Object Oriented Programming কে সংক্ষেপে আমরা বলে থাকি (OOP) মানে O = Object, Object = Oriented এবং P = Programming। এটি একটি programming মডেল যা classes and objects এর ধারনার উপর ভিত্তি করে করা হয়।
সাধারনত আমরা ২ ভাবে PHP কোড করে থাকি। প্রথমটা হলো procedural programming এবং দ্বিতীয়টি হলো Object Oriented Programming।
procedural programming এ মূলত আমরা কিছু procedures অথবা functions লিখে থাকি যা কোন একটা data এর উপর কাজ করে থাকে।
Object Oriented Programming এ আমরা এই সব procedures অথবা functions এবং data একটা object তৈরী করে ঐ object এর মধ্যে রেখে থাকি।
Object Oriented Programming এ আমরা এই সব procedures অথবা functions এবং data একটা object তৈরী করে ঐ object এর মধ্যে রেখে থাকি। এই Object Oriented Programming এ যদি আমরা PHP তে কোড লিখি তাহলে অনেকগুলো সুবিধা পাবো। যেমন-
১। এর মাধ্যমে আমরা একটি সুন্দর, পরিপূর্ণ, স্বচ্ছ একটা structure তৈরী করতে পারি কোন একটা program এর জন্য।
২। এর মাধ্যমে আমরা কোডিং এর একটা প্রিন্সিপল মেনে চলতে পারি আর তা হলো DRY. DRY মানে হলো Don’t Repeat Yourself. মানে একই কোড আবার লেখার কোন প্রয়োজন নেই। যার ফলে কোন কোড পরবর্তীতৈ maintain বা modify বা debug করা অনেক সহজ হয়ে পড়ে।
৩। এর মাধ্যমে আপনি অনেক কঠিন কোড সহজেই এবং কম কোড লিখে করতে পারবেন। যার ফলে আপনার development এর সময় অনেক বেঁচে যাবে।
Class কি?
class হলো একটা template অথবা blueprint। আমরা এই blueprint কে একটি বাড়ির blueprint হিসেবে চিন্তা করতে পারি। একটা বাড়ির blueprint কি থাকে? ঐ বাড়িটা সম্পর্কে একটা সম্পূর্ণ প্লান, তাই না? যে এই বাড়িটার কয়টা রুম হবে, কয়টা কিচেন, কয়টা ওয়াশরুম, কয়টা বারান্দা ইত্যাদি হবে। মানে বাড়িটা সম্পর্কে একটা পরিপূর্ণ প্ল্যান।
class ও ঠিক তাই। এই class এর মধ্যেই আমরা বিভিন্ন property এবং method বলে দিয়ে থাকি। যেমন- কোন property এর value কি হবে, কোন method টা কি কাজ করবে ইত্যাদি। এই class টাই একটি blueprint হিসেবে কাজ করে।
Oject কি?
আমরা আমদের বাড়ির blueprint দিয়ে কি করি? এই blueprint দিয়েই পরবর্তীতে আমরা বিভিন্ন বাড়ি তৈরী করি। যেমন- স্কুলের জন্য একটি বাড়ি, আমাদের জন্য একটি বাড়ি ইত্যাদি। এই স্কুলের জন্য একটি বাড়ি, আমাদের জন্য একটি বাড়ি এগুলো হলো ঐ blueprint এর এক একটি object।
মানে আমাদের তৈরী করা class থেকে বিভিন্ন object করতে পারি।
Class কিভাবে তৈরী করব?
মনে রাখবেন কোন object তৈরী করতে হলে প্রথমেই আপনাকে কোন একটা class তৈরী করে নিতে হবে।
class তৈরী করতে হলে প্রথমে class নামে একটা keyword নিতে হবে তারপর এই class এর একটা নাম নিতে হবে এবং সবশেষ curly braces ({}) ( মানে সেকেন্ড ব্রাকেট) দিয়ে আবদ্ধ করে দিতে হবে। যেমন –
<?php class House { } ?>
এখানে আমরা House নামে একটা empty(ফাঁকা) class তৈরী করেছি। যার মধ্যে এখনও কোন বৈশিষ্ট্য বলে দেই নি মানে কোন property এবং method দেই নি।
মনে রাখবেন class এর মধ্যে আমরা সবসময় কিছু property এবং method দিয়ে আসতে পারি কারন class তো এখানে একটা blueprint হিসেবে কাজ করছে আর blueprint এ যদি কোন প্লান বা বৈশিষ্ট্যই না থাকে তাহলে বাড়ি তৈরী করবেন কিভাবে, তাই না? আপাতত আমরা কোন বৈশিষ্ট্য বা কোন property এবং method বলে দেই নি।
Object কিভাবে তৈরী করব?
কোন একটা class এর object তৈরী করতে হলে প্রথমেই আপনাকে new নামের একটা keyword নিতে হবে তারপর ঐ class এর নাম দিতে হবে। যেমন-
new House;
যেহেতু আমাদের class এর নাম House তাই আমরা House class এর একটা object তৈরী করছি। শুধু object তৈরী করলেই হবে না, এই object দিয়েই আপনাকে ঐ class এর সমস্ত property এবং method কে access করতে হবে। আর এই জন্যই আমরা আমাদের এই তৈরীকৃত object কে একটা variable এর মধ্যে assign করে রাখবো। যেমন-
$house = new House;
কোন একটা class এর object তৈরী করতে হলে প্রথমেই আপনাকে new নামের একটা keyword নিতে হবে তারপর ঐ class এর নাম দিতে হবে। যেমন-
new House;
যেহেতু আমাদের class এর নাম House তাই আমরা House class এর একটা object তৈরী করছি। শুধু object তৈরী করলেই হবে না, এই object দিয়েই আপনাকে ঐ class এর সমস্ত property এবং method কে access করতে হবে। আর এই জন্যই আমরা আমাদের এই তৈরীকৃত object কে একটা variable এর মধ্যে assign করে রাখবো। যেমন-
$house = new House;
এখানে আমরা $house নামে একটা variable এর মধ্যে আমাদের object টা assign করে রেখেছি। ব্যাস, এখন এই $house নামের variable object টা দিয়েই আমরা class এর সকল property এবং method কে access করতে পারবো।
আপনি যদি এই $house নামের variable টাকে gettype() ফাংশনের মাধ্যমে চেক করেন যে এই variable টি কোন ধরনের ডাটা টাইপ বহন করছে –
echo gettype($house);
তাহলে আমরা দেখতে পারবো-
object
মানে এই variable টি object টাইপের ডাটা বহন করছে।
Class এর মধ্যে Property কিভাবে দিব?
আমরা জানি যে কোন একটা বাড়ির blueprint এ কিছু বৈশিষ্ট্য বলে দিতে হয় আর তা না হলে আপনি কিভাবে বলবেন যে এটি একটি blueprint তাই না? blueprint মানেই তো হলো সমস্ত প্ল্যান।
Class এর ক্ষেত্রেও কিছু বৈশিষ্ট্য বলে দিতে হয় যা আমরা property এবং method হিসেবে বলে থাকি।
এখানে property হলো আসলে একটা variable এবং method হলো একটা function। কোন Class এর ভিতর যখন আমরা কোন variable এবং function ব্যবহার করি তখন তাদের নামটা আমরা property এবং method বলে থাকি।
variable যেমন কোন একটা value সংরক্ষন করে ঠিক তেমনি property এর মধ্যেও আপনি কোন value সংরক্ষন করতে পারবেন। এই value হতে পারে কোন string, float, boolean অথবা array ইত্যাদি।
চলুন কিছু property দিয়ে আসি এই House Class এ-
<?php class House { public $window = 4; public $door = 2; public $kitchen = 2; public $washroom = 2; public $garden; } ?>
এখানে দেখতে পাচ্ছেন যে $window, $door, $kitchen, $washroom এবং $garden নামে 5 টা property নিয়েছি এবং এর মধ্যে ৪ টা property এর value দিয়েছি আর তা হলো ৪, ২, ২ এবং ২। আর ৫ম property এর ক্ষেত্রে আমরা কোন value দিয়ে আসি নি কারন আপনি এই property এর value টা যখন object তৈরী করবেন তখন দিয়ে আসতে পারবেন। যেমন- আপনি যে বাড়ি গুলো তৈরী করবেন তাদের প্রত্যেকের যে ফুলের বাগান থাকবে তা কিন্তু না, তবে আপনার blueprint এ আপনি বলে দিয়েছেন আমরা চাইলেই আমাদের বাড়ির জন্য ফুলের বাগান দিতে পারি। এভাবেই কোন Class এর মধ্যে property declare করা যায়।
Class এর মধ্যে Method কিভাবে দিব?
property এর মতো আপনি চাইলে method ও declare করে আসতে পারেন। method মানে হলো আমরা সাধারনত PHP তে যে function ব্যবহার করি তা আর এ function ই যদি Class এর মধ্যে লিখা হয় তাহলে তার নাম বলতে হয় method।
চলুন আমরা একটি method declare করে আসি-
<?php class House { public $window = 4; public $door = 2; public $kitchen = 2; public $washroom = 2; public $garden; public function structure () { echo 'This is our house structure.'; } } ?>
এখানে structure নামে একটা method declare করেছি এবং এই method এর কাজ হলো This is our house structure. এই লেখাটি দেখানো echo এর মাধ্যমে। আপনি চাইলে যে কোন ধরনের system বা কোন একটা কাজ বলে দিতে পারেন এই method এর মধ্যে যেমন ধরুন login system অথবা registration system ইত্যাদি।
Visibility কি?
এখন একটু খেয়াল করলে দেখবেন যে এই সকল property এর আগে public নামে কিছু একটা আমরা দিয়েছি, তাই না? এটা আবার কি?হ্যাঁ এটাকে বলা হয় visibility. আপনাকে প্রত্যেকটা property এবং method এর আগে অবশ্যই visibility বলে দিয়ে আসতে হবে। visibility ৩ প্রকার। যেমন-
১) public
২) private
৩) protected
১) public
আপনি কোন property এবং method কে public visibility দিয়ে আসতে পারেন। এখানে public বলতে কি বোঝানো হচ্ছে? public মানে হচ্ছে আপনি এই property এবং method কে class এর বাহির থেকে access করতে পারবেন এমনকি value ও set করতে পারবেন। আপনি এই public property এবং method কে child class ও access করতে পারবেন। এই টিউটোরিয়ালে আমরা এ নিয়ে বিস্তারিত আলোচনা করব।
২) private
private property এবং method মানে যে property এবং method কে শুধুমাত্র যেই class এ declare করা হয়েছে শুধুমাত্র সেই class এর ভিতরেই এই property এবং method কে access করা যাবে। class এর বাহির থেকে এমনকি child class ও আপনি এই property এবং method কে access করতে পারবেন না। কারন এই property এবং method কে আপনি private বলে দিয়ে এসেছেন। মনে রাখবেন private property এবং method কে class এর বাহির থেকে access করা যাবে না। যদিও একটা tricks রয়েছে।
৩) protected
protected property এবং method মানে যে property এবং method কে যে class এ declare করেছেন সেই class এ এবং child class এ access করতে পারবেন। আপনি protected property এবং method কে class এর বাহির থেকে access করতে পারবেন না।
Class থেকে কিভাবে Property কে Access করব?
class থেকে property কে access করতে হলে প্রথমেই আমাদেরকে একটা object তৈরী করতে হবে। কারন property গুলো কোথায় আছে? class এর ভিতর তাই না? আর আমরা তো সরাসরি class থেকে কোন property কে access করতে পারবো না। তাই প্রথমেই আমরা একটা object তৈরী করব। যদিও আমরা আগেই তা করে ফেলেছি। যেমন- এই লাইনটার কথা মনে আছে-
$house = new House;
এখানে House class এর একটা object তৈরী করে আমরা $house নামে একটা variable এ জমা রেখেছি। এখন আমরা যদি কোন property কে access করতে চাই যেমন- $window নামে যে property আছে তাকে তাহলে আমাদেরকে লিখতে হবে-
echo $house->window;
এখানে আমরা প্রথমে $house নামে object variable কে ধরেছি তারপর একটা স্পেশাল সাইন যার নাম হলো object operator (->) নিয়েছি তারপর যে property কে access করব তার নাম দিয়েছি।
তবে অবশ্যই মনে রাখবেন property কে access করতে হলে ডলার ($) চিহ্ন টা দেওয়া যাবে না। সবশেষ আমরা echo ব্যবহার করেছি যাতে আমরা দেখতে পারি যে আসলেই আমরা property কে access করতে পেরেছি কিনা এবং তার value টা কি। আমরা আউটপুট হিসেবে দেখতে পাবো-
4
সম্পূর্ণ কোডটা যদি আবার লিখি-
<?php class House { public $window = 4; public $door = 2; public $kitchen = 2; public $washroom = 2; public $garden; } $house = new House; echo $house->window ?>
Class থেকে কিভাবে Method কে Access করব?
class থেকে method কে access করতে হলে ঠিক আগের মতই একটা object তৈরী করতে হবে। কারন method গুলো কোথায় আছে? class এর ভিতর তাই না? আর আমরা তো সরাসরি class থেকে কোন method কে access করতে পারবো না। চলুন একটা method দিয়ে আসি আমদের এই class-
<?php class House { public $window = 4; public $door = 2; public $kitchen = 2; public $washroom = 2; public $garden; public function structure () { echo 'This is our house structure.'; } } ?>
এখানে দেখতে পাচ্ছেন যে, আমরা structure নামে একটা method দিয়েছি যার কাজ হলো This is our house structure. এই লেখাকে দেখানো। আর তার জন্য আমাদেরকে প্রথমেই একটা object তৈরী করতে হবে।
$house = new House;
তারপর ঐ method কে Access করতে হলে প্রথমে object এর নাম তারপর object operator (->) এবং সবশেষ যে method কে Access করব তার নাম। এই ক্ষেত্রে নামটা হবে structure যেমন-
$house->structure();
এখন output হিসেবে আমরা দেখতে পাবো-
This is our house structure.
তবে একটু খেয়াল করলে দেখতে পাবেন যে আমরা এই method এর ভিতর আগেই echo করছি আর সে জন্যই আমরা যখন method কে Access করেছি তখন আর echo করিনি। মানে এই ভাবে লিখিনি-
echo $house->structure();
কারন আমরা তো আগেই echo করে ফেলেছি।
আরো আসছে….
[…] এই পর্বে আমরা জেনেছি যে, PHP Class এবং Object কি এবং Object কিভাবে তৈরী করতে হয়। আমরা আরো দেখেছি যে, Visibility কি? আজকে আমরা Visibility এর সম্পূর্ন ব্যবহার দেখব। চলুন শুরু করা যাক – […]
[…] তে Object Oriented Programing এর মাধ্যমে অনেক বড় এবং জটিল কাজ সহজেই […]
আসলে ব্লগটা পড়ে অনেক উপকৃত হলাম। ধন্যবাদ আপনাকে
আলহামদুলিল্লাহ, শুনে খুশি হলাম 🙂