PHP OOP - অ্যাক্সেস মডিফায়ার
PHP - অ্যাক্সেস মডিফায়ার কী?
ক্লাসের প্রপার্টি ও মেথড কোথা থেকে অ্যাক্সেস করা যাবে, তা নির্ধারণ করতে অ্যাক্সেস মডিফায়ার ব্যবহার করা হয়।
PHP-তে তিন ধরনের অ্যাক্সেস মডিফায়ার আছে:
- public: যেকোনো জায়গা থেকে অ্যাক্সেস করা যায় (এটাই ডিফল্ট)
- protected: শুধু ক্লাসের ভেতর এবং ওই ক্লাস থেকে ইনহেরিট করা সাবক্লাসে অ্যাক্সেস করা যায়
- private: শুধু ক্লাসের ভেতরেই অ্যাক্সেস করা যায়
প্রপার্টিতে অ্যাক্সেস মডিফায়ার
নিচের উদাহরণে তিনটি প্রপার্টিতে তিন ধরনের অ্যাক্সেস মডিফায়ার ব্যবহার করা হয়েছে। এখানে name প্রপার্টি public, তাই বাইরে থেকে সেট করা যাবে। কিন্তু color (protected) ও weight (private) প্রপার্টি বাইরে থেকে সেট করতে গেলে ফেটাল এরর হবে।
<?php
class Fruit {
public $name;
protected $color;
private $weight;
}
$mango = new Fruit();
$mango->name = 'Mango'; // ঠিক আছে
$mango->color = 'Yellow'; // ERROR
$mango->weight = '300'; // ERROR
?>সহজ বাংলায় public, protected, private তিনটি access modifier-এর পার্থক্য টেবিল আকারে দেখাচ্ছি।
| Modifier | কোথা থেকে access করা যায় | ব্যবহার | উদাহরণ |
|---|---|---|---|
| public | class-এর ভিতর, subclass, আর class-এর বাইরে | সাধারণ property বা method যা সবাই access করতে পারবে | $name |
| protected | class-এর ভিতর, subclass থেকে | শুধু এই class বা child class-এ access করা যাবে | $address |
| private | শুধু class-এর ভিতর | শুধুমাত্র এই class-এর ভিতরে access করা যাবে, বাইরে বা subclass থেকে access হবে না | $assets |
এই কোডের context এ:
$newMillionear->name; // public → direct access ঠিক আছে
$newMillionear->get_address(); // protected → method দিয়ে access করতে হবে
$newMillionear->get_assets(); // private → method দিয়ে access করতে হবেBeginner mistake:
- Protected বা private property সরাসরি object থেকে access করার চেষ্টা করলে Error আসে।
- তাই সবসময় getter method ব্যবহার করা ভালো।
মেথডে অ্যাক্সেস মডিফায়ার
নিচের উদাহরণে দুইটি ফাংশনে (set_color, set_weight) অ্যাক্সেস মডিফায়ার ব্যবহার করা হয়েছে। এখানে শুধু set_name() ফাংশনটি বাইরে থেকে কল করা যাবে, কারণ এটি public। বাকি দুটি ফাংশন (protected ও private) বাইরে থেকে কল করলে এরর হবে, যদিও সব প্রপার্টি public।
<?php
class Fruit {
public $name;
public $color;
public $weight;
function set_name($n) { // public (ডিফল্ট)
$this->name = $n;
}
protected function set_color($n) { // protected
$this->color = $n;
}
private function set_weight($n) { // private
$this->weight = $n;
}
}
$mango = new Fruit();
$mango->set_name('Mango'); // ঠিক আছে
$mango->set_color('Yellow'); // ERROR
$mango->set_weight('300'); // ERROR
?>