৩. অবজেক্ট ওরিয়েন্টেড পিএইচপি: Access Modifiers

Mahade Hasan
3 min readJul 27, 2021

--

photo credit: https://www.devopsschool.com

১ নং চ্যাপ্টারে আমরা একটি উদাহরন ব্যবহার করেছিলাম যেখানে প্রোপার্টি ও মেথডের আগে public শব্দটি লেখা ছিলো। কোডগুলো ছিলো অনেকটা এরকম:

class Car {    public color;
public brand;
public model;
public fuel;
public function start(){
...
}
public function stop(){
...
}
public function accelerate(){
...
}
}

তো উপরের এই public জিনিসটা কি? এটাকে বলা হয় একসেস মডিফায়ার (Access Modifiers)।

Access Modifiers হলো যখন কোনো ক্লাস থেকে অবজেক্ট তৈরি করা হয় তখন সেই অবজেক্ট ওই ক্লাসের সকল প্রপার্টি ও মেথড ব্যবহার করার বা একসেস করার সুযোগ পায়। তবে…………………………………………………….. সবগুলা না। শুধুমাত্র যাদেরকে ব্যবহার করার অনুমতি দেয়া হয়েছে তাদেরকেই ব্যবহার করতে পারবে। এই অনুমতি তিন ধরনের হয়। অর্থাৎ Access Modifiers তিন প্রকার:

১. public
২. private
৩. protected

নিচে এগুলো নিয়ে সংক্ষিপ্ত ব্যাখ্যা করা হলো।

public:

the property or method can be accessed from everywhere. This is default.

public প্রপার্টি ও মেথড যে কোনো জায়গা থেকে একসেস করা যায়। নিচের উদাহরন টি দেখলে আরো পরিস্কার হয়ে যাবে।

<?php

class Car {

// public methods and properties.
public $model;

public function getModel()
{
return "The car model is " . $this -> model;
}
}

$mercedes = new Car();
//Here we access a property from outside the class
$mercedes -> model = "Mercedes";
//Here we access a method from outside the class
echo $mercedes -> getModel();
Result:The car model is Mercedes

উপরের উদাহরনে Car class টিকে inherit করেছে mercedes অবজেক্ট। mercedes অবজেক্ট Car class এর ভিতরে থাকা public প্রপার্টি $model ও public মেথড getModel() কে ব্যবহার করেছে। প্রথমে বাহিরে থেকেই প্রপার্টি $model এর নাম বা ভ্যালু এসাইন করা হয়েছে। তারপর সেই ভ্যালু ব্যবহার করা হয়েছে getModel() মেথডের ভিতরে $this কিওয়ার্ডের মাধ্যমে। এরপর mercedes এর getModel() মেথডকে echo করার মাধ্যমে রেজাল্ট পাওয়া গিয়েছে।

private:

the property or method can ONLY be accessed within the class.

private প্রপার্টিগুলো শুধুমাত্র ক্লাসের মধ্যেই ব্যবহার করা যায়। উপরের কোডে আমরা $model প্রপার্টির Access Modifier publicপরিবর্তন করে যদিprivate করে দেই। তারপর আগের মত করে যদি ক্লাসের বাহিরে থেকে একসেস করার চেষ্টা করে দেখি কি রেজাল্ট আসে।

<?php

class Car {

//private
private $model;

public function getModel()
{
return "The car model is " . $this -> model;
}
}

$mercedes = new Car();

// We try to access a private property from outside the class.
$mercedes -> model = "Mercedes benz";echo $mercedes -> getModel();

?>
//ResultFatal error: Cannot access private property Car::$model

উপরের কোড থেকে দেখা যাচ্ছে রেজাল্ট Fatal error: এসেছে। অর্থাৎ ক্লাসের বাহিরে থেকে ক্লাসের ভেতরে থাকা কোনো private প্রপার্টি ও মেথড একসেস করা যাবে না।

যদি private প্রপার্টির ভ্যালু ব্যবহারই করতে না পারি তাহলে private প্রপার্টি আমরা কেন ব্যবহার করবো?

অনেক সময় আমাদের এমন কিছু গুরুত্বপূর্ন ইনফরমেশন কোডে রাখতে হয় যার একসেস সাধারন ব্যবহারকারিরা যেন না পায়, শুধুমাত্র যাদের সেই তথ্য বা ইনফরমেশন ব্যবহার করার অধিকার রয়েছে তারাই যেন পায়। সেসব ক্ষেত্রে আমরা ডাটা বা তথ্য কোডের মধ্যে নিরাপদে রাখার জন্য private প্রপার্টি ব্যবহার করি।

তাহলে যাদের সেই ডাটা বা তথ্য ব্যবহার করার প্রয়োজন হবে তারা কিভাবে ব্যবহার করবে?

সেটা আমরা করতে পারি Getters ও Setters ব্যবহার করে।

নিচের কোডগুলো লক্ষ্য করি।

<?php

class Car {

private $model;

public function setModel($model)
{
$this -> model = $model;
}

public function getModel()
{
return "The car model is " . $this -> model;
}
}

$mercedes = new Car();
//Sets the car’s model
$mercedes -> setModel("Mercedes benz");
//Gets the car’s model
echo $mercedes -> getModel();

?>

যেহেতু আমরা জানি আমরা private প্রপার্টি ক্লাসের বাহিরে থেকে একসেস করতে পারবো না, তাই আমরা ক্লাসের ভিতরে দুটি publicপ্রপার্টি তৈরি করবো যাদের নামsetModelgetModel । এই মেথড দুটি public হওয়ার কারনে আমরা বাহিরে থেকেও তাদের একসেস করতে পারবো।

প্রথমে আমরাsetModel মেথডের ভিতরে প্যারামিটার হিসেবে$model প্রপার্টিকে পাস করলাম বা পাঠালাম। তারপর$this কিওয়ার্ডের মাধ্যমে এই $model প্রপার্টির ভ্যালু বা মান হিসেবে এই $model কেই বসিয়েছি। অর্থাৎ$this -> model এর মাধ্যমে$model কেই বুঝায়। একইভাবেgetModel এর মধ্যে $this -> modelএর মান ব্যবহার করেছি। এর মানে হলোাsetModel মেথডের মাধ্যমে $model প্রপার্টির মান সেট করলাম আর getModel এর মাধ্যমে সেই মান নিয়ে আসলাম।

Result:
The car model is Mercedes benz

setModel($model)$modelএর ভ্যালু হিসেবে পাস করলাম Mercedes benz। সেই ভ্যালু $this -> modelএ গিয়ে সেট হয়েছে যেখানে $model private প্রপার্টি। আবার সেই ভ্যালুকে কল করা হয়েছে getModel এর মধ্যে। তাই getModel মেথডকে কল করার সাথে সাথেই আমরা $model private প্রপার্টির ভ্যালু পেয়ে গিয়েছি।

protected:

এবার শুধু বাকি রয়েছে protected। এই অধ্যায়ে আর এই বিষয়ে আলোচনা করা হবে না। কারন protected বুজতে হলে আমাদের আগে ইনহ্যারিটেন্স বুজতে হবে। সামনের অধ্যায়ে আমরা ইনহ্যারিটেন্স নিয়ে আলোচনা করবো ইনশাআল্লাহ।

--

--

Mahade Hasan
Mahade Hasan

Written by Mahade Hasan

বুড়া প্রোগ্রামার

No responses yet