অ্যাক্সেস মডিফায়ার
ক্লাসের মধ্যে প্রোপার্টি এবং মেথড থাকে। আর এই প্রোপার্টি এবং মেথড সমূহের তথ্যকে ক্লাসের বাইরে থেকে অ্যাক্সেস করার জন্য আমরা অ্যাক্সেস মডিফায়ার(access modifier) ব্যবহার করবো।
কেন অ্যাক্সেস মডিফায়ার ব্যবহার করবেন?
একটি ক্লাসের অন্তর্গত প্রোপার্টি এবং মেথডসমুহ ক্লাসের বাইরে থেকে অ্যাক্সেস করার অনুমতি আছে কিনা তা নির্ধারন করার জন্য অ্যাক্সেস মডিফায়ার ব্যবহার করা হয়। এটি অতিব প্রয়োজনীয়। কারন, আপনার প্রোগ্রামের তথ্য কোডসমুহ কে/কারা অ্যাক্সেস করতে পারবে তা আপনাকেই নির্ধারন করে দিতে হবে।
অ্যাক্সেস মডিফায়ার তিন ধরনের হয়। যথাঃ
- public
- private
- protected
আমরা নিম্নে এগুলো সম্পর্কে বিস্তারিত আলোচনা করবোঃ
public অ্যাক্সেস মডিফায়ার
পূর্ববর্তী অধ্যায়ে আমরা এই অ্যাক্সেস মডিফায়ারটি অনেকবার ব্যবহার করেছি। আমরা যে সকল প্রোপার্টি এবং মেথডের পূর্বে public কীওয়ার্ড ব্যবহার করবো ঐ সকল প্রোপার্টি এবং মেথড সমুহকে ক্লাসের বাইরে থেকে যে কেউ অ্যাক্সেস করতে পারবে। নিম্নের উদাহরণটি লক্ষ্য করলেই বুঝতে পারবেনঃ
<?php
class Greeting{
public $name;
public function hello(){
echo "Hello ". $this->name.".";
}
}
//নতুন অবজেক্ট তৈরি করা
$greeting = new Greeting();
// name প্রোপার্টিকে ক্লাসের বাইরে থেকে অ্যাক্সেস করা হয়েছে।
$greeting->name = "Tamjid";
//hello() মেথডকে ক্লাসের বাইরে থেকে অ্যাক্সেস করা হয়েছে।
$greeting->hello();
?>
Hello Tamjid.
উপরের উদাহরণে $name প্রোপার্টি এবং hello() মেথড এর পূর্বে public কীওয়ার্ড ব্যবহারের ফলে এগুলোকে ক্লাসের বাইরে থেকে অ্যাক্সেস করা সম্ভব হয়েছে।
private অ্যাক্সেস মডিফায়ার
আমরা একটি ক্লাসের অন্তর্গত প্রোপার্টি এবং মেথডসমূহকে ক্লাসের বাইরে থেকে অ্যাক্সেস রোধ করতে পারি। এটি করার জন্য আমরা প্রোপার্টি এবং মেথড ঘোষণা করার সময় public কীওয়ার্ডের পরিবর্তে private কীওয়ার্ড ব্যবহার করবো।
নিম্নের উদাহরণে আমরা $name ভ্যারিয়েবলে public কীওয়ার্ড এর পরিবর্তে private কীওয়ার্ড ব্যবহার করেছিঃ
<?php
class Greeting{
private $name;
public function hello(){
echo "Hello ". $this->name.".";
}
}
$greeting = new Greeting();
$greeting->name = "Tamjid";
$greeting->hello();
?>
Fatal error: Cannot access private property Greeting::$name
$name প্রোপার্টির অ্যাক্সেস মডিফায়ার private হওয়ায় এটিকে আর ক্লাসের বাইরে থেকে অ্যাক্সেস করা সম্ভব না। এটি করার কারণেই একটি error পাওয়া গেছে।
Private প্রোপার্টিকে কিভাবে অ্যাক্সেস করবেন?
উপরের উদাহরণে আমরা দেখলাম, private প্রোপার্টিকে ক্লাসের বাইরে থেকে অ্যাক্সেস করার সময় একটি error উৎপন্ন হয়েছে। কিন্তু আমরা কোনো ধরণের error ছাড়াই private প্রোপার্টিকে অ্যাক্সেস করতে চাই।
Private প্রোপার্টিকে অ্যাক্সেস করার জন্য আমরা ক্লাস এর মধ্যে একটি public মেথড ব্যবহার করবো। কারন, public মেথডকে ক্লাসের বাইরে থেকেও অ্যাক্সেস করা যায়।
একটি ক্লাসে public মেথড সাধারনত দুই ধরনের হয়ে থাকেঃ
- Setters: private প্রোপার্টির মান সেট করে।
- Getters: private প্রোপার্টির মান আউটপুট দেয়।
নিম্নের উদাহরণে আমরা public মেথড setName() এর মাধ্যমে private প্রোপার্টি $name এর মান সেট করবো এবং getHello() এর মাধ্যমে সেটকৃত মান এর আউটপুট পাবোঃ
<?php
class Greeting{
private $name;
public function setName($fullName){
$this->name = $fullName;
}
public function getHello(){
echo "Hello ". $this->name.".";
}
}
$greeting = new Greeting();
$greeting->setName("Tamjid");
$greeting->getHello();
?>
Hello Tamjid.
protected অ্যাক্সেস মডিফায়ার
protected মডিফায়ারকেও সরাসরি ক্লাসের বাইরে থেকে অ্যাক্সেস করা যায় না। সরাসরি অ্যাক্সেস করতে চাইলে এটি একটি error তৈরি করে। নিম্নের উদাহরণটি লক্ষ্য করুনঃ
<?php
class Greeting{
protected $name;
public function hello(){
echo "Hello ". $this->name.".";
}
}
$greeting = new Greeting();
$greeting->name = "Tamjid";
$greeting->hello();
?>
Fatal error: Cannot access protected property Greeting::$name
আমরা protected অ্যাক্সেস মডিফায়ার সম্পর্কে পরবর্তীতে আলোচনা করবো।