PHP Object Oriented Programming পর্ব-৫: Visibility or Access Modifier in PHP

PHP তে Visibility বা Access modifier কি ?

PHP তে Visibility বা Access modifier কয়টি এবং কি কি ?

PHP তে Visibility মোট ৩ টি :

  • Public
  • Protected
  • Private

এবার আসুন প্রত্যেকটি Visibility সম্পর্কে উদাহরণসহ বুঝার চেষ্টা করি:

public:

Class এর মধ্যে constant, property, method গুলোকে যদি একই class বা class নিজের মধ্যে , child class এবং class এর বাহির থেকে ব্যবহার রাখতে চাই , তাহলে সেইসব constant, property, method গুলোকে public ঘোষণা করতে হয়। চলুন একটা উদাহরণের মাধ্যমে আরো ভালো ভাবে বুঝা যাক :

<?php
class GrandFather
{
    public $name='Sahab Uddin';  // A public variable
    public function getName(){
      return $this->name;
    }
}
 
class Daddy extends GrandFather // Inherited class
{
    function displayGrandFaName()
    {
        return $this->name; // The public variable will be available to the inherited class
    }
 
}
 
$grandFa=new GrandFather;
 
echo $grandFa->getName(),"\n";
 
// Inherited class Daddy wants to know Grandpas Name
$daddy = new Daddy;
echo $daddy->displayGrandFaName(),"\n"; // Prints 'Sahab Uddin'
 
// Public variables can also be accessed outside of the class!
$outsiderWantstoKnowGrandpasName = new GrandFather;
echo $outsiderWantstoKnowGrandpasName->name; // Prints 'Sahab Uddin'
 
?>

ব্যাখ্যা : পাঠক লক্ষ্য করুন, আমাদের GrandFather class এর $name নামক Property টি public হওয়ায়, $name property টি আমরা একই সাথে current class, child class এবং class এর বাহির থেকেও access করতে পেরেছি।

protected:

Class এর মধ্যে constant, property, method গুলোকে যদি শুধু একই class বা class নিজের মধ্যে এবং তার child class এর মধ্যে ব্যবহার সীমিত রাখতে চাই , তাহলে সেইসব constant, property, method গুলোকে protected ঘোষণা করতে হয়। চলুন একটা উদাহরণের মাধ্যমে আরো ভালো ভাবে বুঝা যাক :

<?php
class GrandFather
{
    protected $name='Sahab Uddin';  // A Protected variable
    public function getName(){
      return $this->name;
    }
}
 
class Daddy extends GrandFather // Inherited class
{
    function displayGrandFaName()
    {
        return $this->name; // The Protected Property will be available to the inherited class
    }
 
}
 
$grandFa=new GrandFather;
 
echo $grandFa->getName(),"\n"; //Prints 'Sahab Uddin'
 
// Inherited class Daddy wants to know Grandpas Name
$daddy = new Daddy;
echo $daddy->displayGrandFaName(),"\n"; // Prints 'Sahab Uddin'
 
// Protected Property can not be accessed outside of the class!
$outsiderWantstoKnowGrandpasName = new GrandFather;
echo $outsiderWantstoKnowGrandpasName->name; // // Results in a Fatal Error
 
?>

ব্যাখ্যা : পাঠক লক্ষ্য করুন, আমাদের GrandFather class এর $name নামক Property টি protected হওয়ায়, $name property টি আমরা একই সাথে current class এবং child class থেকে access করতে পেরেছি কিন্তু current class অথবা child class এর বাহির থেকে access করতে পারবোনা, করলে আপনাকে fatal error দেখাবে।

private :

Class এর মধ্যে constant, property, method গুলোকে যদি শুধু একই class বা class নিজের মধ্যে ব্যবহার সীমিত রাখতে চাই , তাহলে সেইসব constant, property, method গুলোকে private ঘোষণা করতে হয়। চলুন একটা উদাহরণের মাধ্যমে আরো ভালো ভাবে বুঝা যাক :

<?php
class GrandFather
{
    private $name='Sahab Uddin';  // A Protected variable
    public function getName(){
      return $this->name;
    }
}
 
class Daddy extends GrandFather // Inherited class
{
    function displayGrandFaName()
    {
        return $this->name; // The Private Property will not available to the inherited class and will show notice
    }
 
}
 
$grandFa=new GrandFather;
 
echo $grandFa->getName(),"\n"; //Prints 'Sahab Uddin'
echo $gradFa->name, "\n"; //Results in a Notice 
 
// Inherited class Daddy wants to know Grandpas Name
$daddy = new Daddy;
echo $daddy->displayGrandFaName(),"\n"; // Results in a Notice 
 
// Protected Property can not be accessed outside of the class!
$outsiderWantstoKnowGrandpasName = new GrandFather;
echo $outsiderWantstoKnowGrandpasName->name; // // Results in a Fatal Error
 
?>

ব্যাখ্যা : পাঠক লক্ষ্য করুন, আমাদের GrandFather class এর $name নামক Property টি private হওয়ায়, $name property টি আমরা শুধু মাত্র current class এর ভিতরে ব্যবহার করতে পেরেছি, কিন্তু current class এর বাহির থেকে access বা ব্যবহার করতে পারবোনা, করলে আপনাকে error দেখাবে।

Leave A Reply

Your email address will not be published. Required fields are marked *