৩. অবজেক্ট ওরিয়েন্টেড পিএইচপি: Access Modifiers
১ নং চ্যাপ্টারে আমরা একটি উদাহরন ব্যবহার করেছিলাম যেখানে প্রোপার্টি ও মেথডের আগে 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
প্রপার্টি তৈরি করবো যাদের নামsetModel
ও getModel
। এই মেথড দুটি 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 বুজতে হলে আমাদের আগে ইনহ্যারিটেন্স বুজতে হবে। সামনের অধ্যায়ে আমরা ইনহ্যারিটেন্স নিয়ে আলোচনা করবো ইনশাআল্লাহ।