Saturday, April 25, 2020

সহজ দৃষ্টিতে PHP এর Object


13 April, 2016
-----------------------------
PHP তে oop(object oriented programming) শেখানো এই টিউটোরিয়ালের উদ্দেশ্য নয় । এর উদ্দেশ্য হলো PHP এর Object কে একটি সহজ-সরল দৃষ্টিকোণ থেকে অবলোকন করা । আমাদের মাঝে অনেকেই আছেন মৌলিক অনেক কিছু না বুঝেই অনেক বড় বড় জিনিস শিখে ফেলি বা ফেলতে পারি । মৌলিক জিনিসটা যে বুঝিনি বা বোঝা প্রয়োজন সেটাও বুঝতে পারি না বা এটা নিয়ে কখনও মাথা ঘামাই না । আবার অনেকেই আছেন মূল জিনিসটা ঠিকমত না বোঝার কারণে পুরো বিষয়টাই শিখতে পারেন না বা শিখলেও একটা ’কিন্তু’ থেকে যাওয়ার কারণে সব সময়ই অস্বস্তি বোধ করেন এবং পুরো বিষয়টা আয়ত্ব করতে হিমশিম খান । আজকের টিউটটি মূলত দ্বিতীয় শ্রেণীর শিক্ষার্থীদের জন্য । তাহলে চলুন, আমরা একদম সহজভাবে PHP এর Object বোঝার চেষ্টা করি ।
.
পরামর্শ: যাঁরা JavaScript এর Object মোটামুটি (খুব ভালোভাবে নয়) জানেন, তাঁরা আপাতত মাথা থেকে সেগুলো একদম সরিয়ে রাখুন । সেগুলো মাথায় ঢুকিয়ে রাখলে এটা বুঝতে সমস্যা হবে । পুরো বিষয়টা ভালোভাবে আত্মস্থ করার পর সেগুলো মাথায় আনলে তুলনামূলক বিচার করতে পারবেন । আবারও বলছি,  JavaScript এর Object আপাতত মাথা থেকে সরিয়ে রাখুন
…….
আমরা প্রথমে PHP তে একটি variable তৈরি করে সেটাতে একটি স্ট্রিং মান রাখবো:

$name = ‘rana’;


এই ভ্যারিয়েবলটিকে আমরা প্রিন্ট করাতে চাইলে নিচের কোডটি লিখি:

echo $name;


এর ফলে rana শব্দটি প্রিন্ট হবে ।
. ……
আমরা এখন একটি User Defined Function তৈরি করবো :

function study(){
    echo "He likes to study";
}


আমরা যদি এই ফাংশনকে কল বা কার্যকর করতে চাই তবে ফাইলের যেকোন জায়গায় নিচের কোডটি লিখে দিই এবং তার ফলে ফাংশনটির ভিতরে যেসব কোড থাকে সেগুলো কার্যকর (execute) হবে ।

study();

উপরের কোডটি লেখার কারণে He likes to study বাক্যটি পেইজে প্রিন্ট হবে ।
এ বিষয়গুলো আমরা যারা PHP ব্যাসিক শিখেছি তারা সবাই জানি । এভাবে variable, function এবং যাবতীয় কোড সাধারণভাবে লিখে প্রোগ্রামিং করাকে বলে procedural programming
………..
এবার মাথা থেকে প্রোগ্রামিং মুছে ফেলে একটু অন্য প্রসঙ্গে যাওয়া যাক…. ধরুন আপনি যখন পড়াশোনা করেন তখন আপনার প্রয়োজন হয় খাতা, বই, কলম, পেন্সিল সহ হালের ল্যাপটপ(ফেইসবুকিং করার জন্য ;)), মোবাইল (পড়া বাদ দিয়ে খাজুরে আলাপ করার জন্য ;)) ইত্যাদি । এই জিনিসগুলো যদি ছড়িয়ে ছিটিয়ে থাকে মানে বই থাকলো টিভির রুমে, খাতা থাকলো ছোট ভাইয়ের স্কুল ব্যাগের ভিতর, মোবাইল বালিশের নিচে সোজা কথায় আপনার প্রয়োজনীয় জিনিসগুলো ছড়িয়ে ছিটিয়ে থাকলে আপনি যখন কাজ করতে বসবেন তখন ভীষণ সমস্যা হবে । কাজে গতি কমে যাবে । ছোট একটা কাজ করতে অনেক বেশি সময় এবং শ্রম দিতে হবে । প্রয়োজনীয় জিনিসগুলোকে একটি জায়গায় সাজিয়ে গুছিয়ে রাখলে সহজেই এবং কম সময়ে কাজ করা সম্ভব । আপনি আপনার প্রয়োজনীয় জিনিসগুলোকে এক জায়গায় একটি তাকে বা বাক্সে বা দেরাজে (ড্রয়ারে) ‍সুন্দর করে সাজিয়ে রাখলেন । এখন কোন জিনিসের প্রয়োজন হলে প্রথমেই আপনাকে হাত বাড়াতে হবে ঐ জিনিসটি যে তাকে বা বাক্সে বা দেরাজে রাখা আছে সেটাতে । তারপর সেখান থেকে প্রয়োজনীয় জিনিসটি বেছে নিতে হবে । এভাবে জিনিসটি খুঁজে পাওয়ার পদ্ধতি একটু ভিন্ন হলেও সময়, শ্রমব্যয় এবং হয়রানি কম হবে । এখানে বাক্স বা তাক বা দেরাজ হলো Object । ভেতরের জিনিসগুলো (বই, থাতা, কলম ইত্যাদি) হলো সম্পদ বা property ।
…….
পড়াশোনা বিরতির পর আবার আমরা প্রোগ্রামিংয়ে ফিরে আসি… উপরের মত করে variable, function বা এ জাতীয় অন্যান্য কোড প্রথাগত নিয়মে (procedural way) লিখে programming করতে অনেক বেশি কোড লিখতে হয় এবং অনেক সময় ব্যয় হয় । আমরা একটা কাজ করি, উপরের variable এবং function টিকে একটি দড়ি(কোড) দিয়ে বেঁধে ফেলি । কোড দু’টিকে নিচের কোডের second bracket/curly braces এর মধ্যে চোখ বন্ধ করে ঢুকিয়ে দেই ।
class person{}
এখানে class হলো একটি key word, আর person হলো একটি সাধারণ শব্দ যা আপনি ইচ্ছেমত দিতে পারবেন ।
এটার ভিতরে আমাদের variable এবং function কে ঢুকালে পুরো কোডটুকু হবে নিম্নরূপ:

class person{
    $name = 'rana';
    function study(){
        echo "He likes to study";
    }


একদম সহজ হিসাব । আগের সাধারণ কোডগুলিকেই আরেকটি কোডের (class person{})মধ্যে ঢুকিয়ে আঁটি (class) বেধে ফেললাম । এটাকে বলে Object এর Template তৈরি করা (খুব সম্ভবত !) । এটা হচ্ছে object তৈরির প্রথম ধাপ ।এখানে আঁটির (class এর) নাম হলো person ।
person এর আগে new (key word) শব্দটিকে বসিয়ে দিলে বিষয়টা দাঁড়াবে ঠিক এরকম

new person;


কাজটি করে আমরা একটা বিশাল কাহিনী করে ফেলেছি । কাহিনীটা হলো আমরা একটি নতুন object এর উদাহরণ/দৃষ্টান্ত স্থাপন করলাম । আমরা অনেক সময় বলি না ! অমুক লোক মানবতার এক উজ্জ্বল/অনন্য দৃষ্টান্ত স্থাপন করেছেন । ঠিক সেরূপ আমরা object এর একটি উদাহরণ সৃষ্টি করলাম । প্রোগ্রামিংয়ের ভাষায় এই কাজটিকে বলে instanciate । new person এভাবে কোড লেখাকে বলে instanciate করা ।
এখনো কিন্তু আমাদের object তৈরি সম্পন্ন হয়নি L । উদাহরণটিকে মানে new person; টিকে একটি ভ্যারিয়েবলের মধ্যে রেখে দিলাম নিচের মত করে:


$myObject = new person;


এখানে $myObject ভ্যারিয়েবলটিই হলো আমাদের বহুল কাংখিত object ।
এবার মনে করে দেখুন তো আমরা যখন খাতা/কলম কে কোন ড্রয়ারে রেখে দিয়েছিলাম তখন খাতা/কলম পাওয়ার জন্য আমাদেরকে প্রথমে ড্রয়ার খুলতে হয়েছে । তারপর খাতা/কলম পেয়েছি । ঠিক তেমনি এখন আমরা ভ্যারিয়েবল $name কে echo করতে চাইলে আগের মত সরাসরি করতে পারবো না । আমাদেরকে অবজিক্ট ($myObject) এর মধ্য থেকে $name কে নিয়ে তারপর echo করতে হবে । যেমন-

echo $myObject -> name;

আগে লিখেছিলাম এভাবে

echo $name;

…..
এক্ষেত্রে name ভ্যারিয়েবলটিকে বলা হবে $myObject (অবজিক্ট)এর property । property মানে হচ্ছে সম্পদ/সম্পত্তি ইত্যাদি । একজন ব্যক্তির নাম তার একটা সম্পদ , তাই না ? property তে থাকে শুধু মান । যেমনটা $name এর মধ্যে একটি স্ট্রিং মান ‘rana’ রয়েছে ।
তেমনি

function study(){
echo "He likes to study";
}

কে কল করতে চাইলে এভাবে করতে হবে:


$myObject -> study();

আগে লিখেছিলাম এভাবে

study();


…..
এখানে, আর echo করতে হবে না । কারণ study() ফাংশনের মধ্যের মানটিকে আগেই echo করা আছে । অবশ্যই মনে রাখবেন, study() ফাংশনটিকে এখন আর ফাংশন বলা হবে না । এখন বলা হবে $myObject (অবজিক্ট) এর মেথড method । মেথডে থাকে অবজিক্টের কাজ করার ধরন বা প্রক্রিয়া । study() মেথড দ্বারা জানা যায় $myObject অবজিক্টটির study করার ধরন বা পছন্দ/অপছন্দ ইত্যাদি ।
………….
এ পর্যায়ে এসে php বসেরা নিশ্চয়ই হৈ চৈ করে উঠবেন—ঐ মিয়া এইডা কি php এর অবজিক্ট তৈরি করা হইলো ?

না… মানে… ইয়ে… মানে.. বস আসলে আমি এখনো অবজিক্ট তৈরি শেষ করিনি । আসলে অবজিক্ট তৈরি করা বা php oop শেখানোও আমার উদ্দেশ্য নয় । আমি এতক্ষণ ধরে এটাই বোঝাতে চেয়েছি যে, আমরা সাধারণ procedural প্রোগ্রামিং এ যেসব variable/function ইত্যাদি লিখি ঠিক সেগুলোকেই class person{} এর মধ্যে ঢুকিয়ে দিলেই সেগুলো একটি অবজিক্ট হয়ে যায় । যদিও এটা হলো অবজিক্ট তৈরির প্রথম ধাপ । যেমনটা এতক্ষণ বর্ণনা করার চেষ্টা করা হয়েছে ।
যাহোক আর একটু বলে আমার কথা শেষ করছি….
আশা করছি এখন পর্যন্ত আপনারা অন্তত এটুকু বুঝতে পেরেছেন যে, আমাদের ব্যবহৃত কোডগুলোকেই class এর মধ্যে ঢুকিয়ে অবজিক্ট (মানে অবজিক্টের নমুনা) তৈরি করা হয় যাতে পরবর্তীতে সেগুলোকে সহজে ব্যবহার করে প্রোগ্রামিং এর কাজকে সহজতর করা যায় ।
এবার আমরা আরও একটু উচ্চাঙ্গের কাজ করতে পারি… class এর ভেতরের ভ্যারিয়েবল/ফাংশন এ কিছু বৈশিষ্ট্য আরোপ করতে পারি যেমন- কোন ভ্যারিয়েবল/ফাংশন কোথায় কোথায় ব্যবহার করা যাবে সেটা নির্দিষ্ট করে দিতে পারি । এ কাজটি করার জন্য আমরা ব্যবহার করি তিনটি key word, যেমন- public, private এবং protected ইত্যাদি । এদেরকে বলা হয় access modifier
কোনো ভ্যারিয়েবল/ফাংশন-এর আগে public থাকলে ঐ ভ্যারিয়েবল/ফাংশনকে যেকোন জায়গায় (হোক সেটা class এর বাইরে, হোক সেটা ঐ class বা অন্য class এর ভিতরে) ব্যবহার করা যাবে ।
যদি থাকে protected তবে সেটাকে তার নিজের class এর মধ্যে ব্যবহার করা যাবে, এবং অন্য কোন class নিয়ে গিয়ে ব্যবহার করা যাবে । class এর বাইরে ব্যবহার করা যাবে না ।
আর private থাকলে শুধুমাত্র ভ্যারিয়েবল/ফাংশনটি যে class এর মধ্যে থাকে সেই class মধ্যেই ব্যবহার করা যাবে ।  অন্য কোন class বা class এর বাইরে ব্যবহার করা যাবে না ।
Access modifier সহ আমাদের class টি দেখতে হবে অনেকটা এ রকম :

class person{

    public $name = 'rana';
    private $email = 'rana@gmail.com';
    protected function study(){
        echo "He likes to study";
    }


শুধুমাত্র আমাদের আগের variable/function এর আগে access modifier গুলোকে প্রয়োজন মত লিখে দিতে হবে ।

যা’হোক, আমি যেটা বোঝাতে চেয়েছি সেটা হলো, শুরুতেই class মধ্যে access modifier গুলোকে ঢুকিয়ে বিষয়টাকে জটিল না করে প্রথমে খুব সহজভাবে অবজিক্টকে কল্পনায় আনতে পারলে পরবর্তীতে Object Oriented Programming আমাদের জন্য পানি-ভাত হয়ে যাবে, ইনশাআল্লাহ ।

No comments:

Post a Comment