PHP Visibility

Introduction to PHP Visibility

किसी भी web application का secure होना अति आवश्यक होता है। यदि आपकी web application secure नहीं है तो कोई भी इसे आसानी से break कर सकता है और आपके users का private और महत्वपूर्ण data access कर सकता है।

उदाहरण के लिए classes में आपकी application से related महत्वपूर्ण data properties के रूप में store किया जाता है। इस data पर functions द्वारा operations perform किये जाते है। इन properties और functions को आसानी से class के बाहर object द्वारा access किया जा सकता है। ऐसे में आपका data secure नहीं रहता है।

Data को secure करने के लिए PHP आपको controlling access mechanism provide करती है। इस mechanism को visibility कहा जाता है। Visibility द्वारा आप सभी properties और methods के access को control कर सकते है।

PHP Visibility Modes

PHP का visibility mechanism 3 modes में काम करता है। ये modes अलग अलग access levels define करते है। Programmers need के अनुसार किसी भी mode का access level properties और methods पर apply कर सकते है।

Visibilty modes keywords के रूप में available है जिन्हें आप properties और methods declare करते समय define करते है।

Syntax of PHP Visibility Modes

Properties पर visibility modes apply करने का general syntax निचे दिया जा रहा है।

[visibilityMode] [propertyName] = [constantValue];

Functions पर visibility modes apply करने का general syntax निचे दिया जा रहा है।

[visibilityMode] [functionKeyword] [functionName] (arguments-list)
{

}

सभी visibility modes के बारे में निचे detail से बताया जा रहा है।

Public

जब आप किसी property या method को public visibility mode के साथ declare करते है तो उन पर निचे दी गयी conditions apply हो जाती है। जिस class में इन्हें declare किया गया है उसके अंदर इन्हें access किया जा सकता है। जिस class में इन्हें declare किया गया है उसे inherit करने वाली किसी भी class के अंदर इन्हें access किया जा सकता है।
जिस class में इन्हे declare किया गया है उसके बाहर इन्हें access किया जा सकता है।

Public visibility mode का उदाहरण निचे दिया जा रहा है।

<?php

// my class

class myClass
{
   public $name = 'James Bond';

}

//Child Class

class subClass extends myClass
{

}

$obj = new myClass();
$subObj = new myClass();

echo $obj->name."<br />";     // Can easily access property outside the class by creating class object. Valid
echo $subObj->name;    //This is valid also

?>

जैसा की आप ऊपर दिए गए उदाहरण में देख सकते है, public declare की गयी properties को class के बाहर आसानी से access किया जा सकता है। आपको उन्हीं properties और functions को public declare करना चाहिए जो महत्वपूर्ण नहीं हो या फिर जिनका आपकी web application से interact करने के लिए publicly access होना आवश्यक हो। यह उदाहरण निचे दिया गया output generate करता है।

PHP visibility in Hindi

Protected

जब आप किसी property या method को protected visibility mode के साथ declare करते है तो निचे दी गयी conditions उन पर apply हो जाती है। जिस class में इन्हे declare किया गया है उसके अंदर इन्हें access किया जा सकता है। जिस class में इन्हे declare किया गया है उसे inherit करने वाली किसी भी class के अंदर इन्हें access किया जा सकता है।

Protected visibility mode का उदाहरण निचे दिया जा रहा है।

<?php
class myClass
{
   protected $name = 'Dr Abdul Kalam';
}

class myOtherClass extends myClass
{
   public function displayName()
   {
      return $this->name;  //Valid, myOtherClass is inheriting myClass
   }
}

$obj = new myClass;

//echo $obj->name;   Invalid will generate an error.
$otherObj = new myOtherClass;

echo $otherObj->displayName();   //Valid inheriting class is accessing $name through public function. And public function can be accessed outside class.

?>

जैसा की आप ऊपर दिए गए उदाहरण में देख सकते है protected properties को class के बाहर नहीं access किया जा सकता है। यदि आप चाहते है की कोई property या function sub classes द्वारा access किया जा सके तो इसके लिये आपको उन्हें protected declare करना चाहिए। यह उदाहरण निचे दिया गया output generate करता है।

PHP visibilty

Private

जब आप किसी property या method को private visibility mode के साथ declare करते है तो निचे दी गयी conditions उन पर apply हो जाती है। जिस class में इन्हें declare किया गया है केवल उसी class के अंदर इन्हें access किया जा सकता है।

Private visibility mode का उदाहरण निचे दिया जा रहा है।

<?php

class myClass
{
     private $name='Sherlok';

     public function display()
    {
         echo "$this->name";
    }
}

class myOtherClass extends myClass
{
      public function displayName()
      {
           // return $this->name;  //Invalid, Inheriting class cannot access private properties
      }
}

$obj = new myClass;

//echo $obj->$name; // Not Valid : Property is private can not access outside class
echo $obj->display(); //Valid accessing through public function

?>

जैसा की आप ऊपर दिए गए उदाहरण में देख रहे है private properties को class के बाहर access नहीं किया जा सकता है। इन्हे सिर्फ उसी class के अंदर access किया जा सकता है जिसमें इन्हे declare किया गया है। जब आपका data महत्पूर्ण हो तो उस property को private declare करना चाहिए। ऐसा करने से सिर्फ class के अंदर ही उस property को access किया जा सकता है। ऊपर दिया गया उदाहरण निचे दिया गया output generate करता है।

PHP visibilty private

⇨ सभी properties को private declare करना और उन्हें public methods के द्वारा access करना एक अच्छी object oriented practice मानी जाती है।