PHP তে Class এ Visibility কি এবং এর ব্যবহার

এই পর্বে আমরা জেনেছি যে, PHP Class এবং Object কি এবং Object কিভাবে তৈরী করতে হয়। আমরা আরো দেখেছি যে, Visibility কি? আজকে আমরা Visibility এর সম্পূর্ন ব্যবহার দেখব। চলুন শুরু করা যাক –

PHP তে Class এর Visibility ৩ প্রকার আর তা হলো –

১) public
২) private
৩) protected

১) public

public Visibility এর কাজ হলো আমরা যে Property এবং Method এ এই public Visibility ব্যবহার করব সেই Property এবং Method গুলো Class এর বাহিরে থেকে সহজেই Access করা যাবে। যেমন-

<?php
class House {
    public $window = 4;
    public $door = 2;
    public $kitchen = 2;
    public $washroom = 2;
    public $garden;
    public function structure () {
        echo 'This is our house structure.';
    }
}
$house = new House;
// Access public property
echo $house->window;
echo '<hr/>';
// Access public method
echo $house->structure();

উপরের কোডে আমরা দেখতে পাচ্ছি যে, $window নামের Property কে Class বাহির থেকে এক্সেস করতে পেরেছি echo $house->window; মাধ্যমে যার ফলে ব্রাউজারে দেখতে পাব ৪। মানে এই $window নামের Propert টির যে মান আমরা সেট করেছি তা দেখতে পাচ্ছি।
আবার echo $house->structure(); এর মাধ্যমে আমরা সহজেই structure() নামের মেথডটি এক্সেস করতে পেরেছি যার ফলে ব্রাউজারে দেখাবে –

This is our house structure.

এভাবে Class এর Property এবং Method বাহির থেকে এক্সেস করতে পারিছ এই জন্য যে, আমরা এই Property এবং Method এর Visibility public দিয়ে এসেছিলাম। এটাই হলো public Visibility এর কাজ।

২) private

Private Visibility এর কাজ হলো যে Property এবং Method কে এই Private Visibility দিয়ে আসব সেই Property এবং Method শুধুমাত্র ঐ Class এর ভিতর থেকে এক্সেস করা যাবে যেই Class এ এই Property এবং Method ডিক্লেয়ার করা হয়েছে। যেমন-

class House {
    public $window = 4;
    public $door = 2;
    public $kitchen = 2;
    public $washroom = 2;
    public $garden;
    private $door_key_name = 'Master Key';
    public function structure () {
        echo 'This is our house structure.';
    }
    private function open_door_with_key () {
        echo 'Open the door with some key';
    }
}
// Create Object
$house = new House;
// Access private property
$house->door_key_name;
echo '<hr/>';
// Access private method
$house->open_door_with_key();
echo '<hr/>';

উপরের কোডে আমরা $door_key_name নামে ১ টি Private Property এবং open_door_with_key নামে ১ টি Private Method নিয়েছি। এখন যখন এই Property কে Class বাহির হতে এক্সেস করতে যাচ্ছিলাম –

// Access private property
$house->door_key_name;

তখন দেখব যে আমাদের স্ক্রিপটি আর কাজ করছে না। ব্রাউজারে এই Fatal error মেসেজটি দেখাচ্ছে –

Fatal error: Uncaught Error: Cannot access private property House::$door_key_name in /Applications/MAMP/htdocs/amarcourse/blog/php/oop.php:25 Stack trace: #0 {main} thrown in /Applications/MAMP/htdocs/amarcourse/blog/php/oop.php on line 25

এখানে বলছে যে, Cannot access private property House::$door_key_name….
এর মানে হলে যে আমরা কোন private property কে Class বাহির হতে এক্সেস করতে পারব না। ঠিক এই ভাবে যদি open_door_with_key নামের Method কে এক্সেস করতে যাই –

// Access private method
$house->open_door_with_key();

তাহলে দেখবে যে,

Fatal error: Uncaught Error: Call to private method House::open_door_with_key() from context '' in /Applications/MAMP/htdocs/amarcourse/blog/php/oop.php:28 Stack trace: #0 {main} thrown in /Applications/MAMP/htdocs/amarcourse/blog/php/oop.php on line 28

এখানে বলছে যে, Call to private method House::open_door_with_key() মানে হলে যে আমরা কোন private Method কে Class বাহির হতে এক্সেস করতে পারব না।
কিন্তু কথা হলো কিভাবে এক্সেস করব এই private Property এবং Method কে? হ্যা, তার জন্য একটা উপায় আছে আর তা হলো private ডাটা গুলোকে Public Method থকেে এক্সেস করা। যেমন –

class House {
    public $window = 4;
    public $door = 2;
    public $kitchen = 2;
    public $washroom = 2;
    public $garden;
    private $door_key_name = 'Master Key';
    public function structure () {
        echo 'This is our house structure.';
    }
    private function open_door_with_key () {
        echo 'Open the door with some key';
    }
    public function get_private_data() {
        echo 'I am getting private property - ' . $this->door_key_name;
    }
}

উপরের কোডে আমরা নতুন ১টি get_private_data নামের Method নিয়েছি যার Visibility দেওয়া হয়েছে Public। এই Method এর ভিতরে বলে দিয়েছি –

echo 'I am getting private property - ' . $this->door_key_name;

এখানে এই $this->door_key_name; এর মাধ্যমে বলে দিয়েছি যে, বর্তমান অবজেক্টেরে door_key_name নামের Property কে এক্সেস কর। এখন ব্রাউজারে দেখব যে –

I am getting private property – Master Key

এর কারন হলো আমরা জানি যে, Public property এবং Method কে Class এর বাহির হতে এক্সেস করা যায়।
এটাই হলো private Visibility এর কাজ।

৩) protected

Protected Visibility এর কাজ হলো আমরা যে Property এবং Method কে এই Protected Visibility দিয়ে আসব সেই Property এবং Method শুধুমাত্র যে Class এ declare করা আছে সেই Class এ এবং Child Class এ Access করা যাবে। যেমন-

class House {
    public $window = 4;
    public $door = 2;
    public $kitchen = 2;
    public $washroom = 2;
    public $garden;
    private $door_key_name = 'Master Key';
    protected $master_card_name = 'DBBL Master Card';
    public function structure () {
        echo 'This is our house structure.';
    }
    private function open_door_with_key () {
        echo 'Open the door with some key';
    }
    public function get_private_data() {
        echo 'I am getting private property - ' . $this->door_key_name;
    }
    public function get_protected_data() {
        echo 'I am getting protected property - ' . $this->master_card_name;
    }
}

উপরের কোডে $master_card_name = ‘DBBL Master Card’; নামের ১ টি Protected Property নিয়েছি। এখন এই Property টিকে যদি এক্সেস করতে যাই –

// Create Object
$house = new House;
// Access protected property
$house->master_card_name;

তাহলে ব্রাউজারে আমরা এই ইরর মেসেজেটি পাব –

Fatal error: Uncaught Error: Cannot access protected property House::$master_card_name in /Applications/MAMP/htdocs/amarcourse/blog/php/oop.php:46 Stack trace: #0 {main} thrown in /Applications/MAMP/htdocs/amarcourse/blog/php/oop.php on line 46

এর মানে হলো যে Class এর বাহির থেকে আমরা কোন protected Property বা Method কে এক্সেস করতে পারব না। তাহলে কোথায় এক্সেস করতে পারব? হ্যা, আপনি ঐ Class এর ভিতর এবং এই Class এর Child Class এর ভিতর এক্সেস পারবেন।
এই Class ভিতর এক্সেস করার জন্য লিখেছি এই get_protected_data() নামের নতুর একটি Public মেথড যার কাজ হলো এই Class এর protected Property কে echo করা যেমন –

public function get_protected_data() {
    echo 'I am getting protected property - ' . $this->master_card_name;
}

এখন এই মেথডকে যদি আমরা এক্সেস করি –

// Access protected method
$house->get_protected_data();
echo '<hr/>';

তাহলে ব্রাউজারে দেখতে পাব –

I am getting protected property – DBBL Master Card

এছাড়া Child Class ও এই protected Property এবং Method কে এক্সেস করা যাবে। তার জন্য আমরা Child Class তৈরী করব এভাবে –

Class My_House extends House {
}

এখানে House নামের Class কে extends করে My_House নামে নতুন একটি Class নিয়েছি যা আসলে House নামরে Parent Class এর একটি Child Class। এখন এই Child Clas ভিতর থেকে Parent Class এর protected Property টিকে এক্সেস করার জন্য my_card_name() নামে নতুন ১টি ফাংশন নিব যার কাজ হলো Parent Class থেকে protected Property কে এক্সেস করা –

Class My_House extends House {
    public function my_card_name() {
        echo $this->master_card_name;
    }
}

এখন এই Child Class এর ১টি Object তৈরী করে ঐ my_card_name() মেথডটিকে কল করব –

// Create My_House Object
$my_house = new My_House;
// Access public methid from My_House object
$my_house->my_card_name();
echo '<hr/>';

তাহলে ব্রাউজারে আমরা দেখতে পাব –

DBBL Master Card

এভাবেই PHP তে OOP এর Visibility গুলো কাজ করে। আশাকরি বুঝতে ভাল লেগেছে 🙂

Leave a Comment