Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> PHP

PHP विजिबिलिटी मोड्स (Visibility Modes) - public, private, protected


परिचय

PHP में, class कीवर्ड का उपयोग करके उपयोगकर्ता-परिभाषित कंपाउंड डेटा प्रकार बनाना संभव है। क्लास का एक नया इंस्टेंस एक ऑब्जेक्ट होता है। ऑब्जेक्ट की विशेषताएं क्लास की परिभाषा के अनुसार होती हैं, जिसमें प्रॉपर्टी, कॉन्स्टेंट और मेथड सदस्य हो सकते हैं।

क्लास सदस्य की पहुंच (जिसे विजिबिलिटी भी कहा जाता है) उसकी परिभाषा में जुड़े विजिबिलिटी प्रीफिक्स कीवर्ड पर निर्भर करती है। PHP में तीन विजिबिलिटी कीवर्ड हैं - public, private और protected। पब्लिक कीवर्ड के साथ घोषित क्लास सदस्य कहीं से भी पहुंच योग्य होता है। एक प्रोटेक्टेड सदस्य अपनी क्लास और विरासत में मिली क्लास से पहुंच योग्य होता है। दूसरी ओर, एक प्राइवेट सदस्य केवल उसी क्लास द्वारा एक्सेस किया जा सकता है जिसमें यह परिभाषित है और इसके बाहर किसी भी चीज़ के लिए दृश्यमान नहीं है।

प्रॉपर्टी विजिबिलिटी (Property Visibility)

एक प्रॉपर्टी क्लास इंस्टेंस का एक गुण है। यह एक इंस्टेंस प्रॉपर्टी हो सकती है (प्रत्येक ऑब्जेक्ट के लिए अलग मान) या क्लास प्रॉपर्टी जिसका प्रत्येक ऑब्जेक्ट के लिए समान मान हो। एक प्रॉपर्टी किसी भी वैध PHP डेटा प्रकार की हो सकती है। एक प्रॉपर्टी में डिफ़ॉल्ट रूप से पब्लिक विजिबिलिटी होती है। यदि कोई प्रॉपर्टी var कीवर्ड का उपयोग करके परिभाषित की गई है (जिसे अब डिप्रिकेटेड कर दिया गया है), तो इसे पब्लिक माना जाता है।

उदाहरण 1: प्रॉपर्टी विजिबिलिटी

<?php 
class myclass { 
    public $fname = "Ajay"; 
    var $lname; // पब्लिक माना जाता है 
    private $marks = 100; 
    protected $age = 20; 
} 
$obj = new myclass(); 
echo "$obj->fname\n"; 
$obj->lname = "Diwan"; 
echo "$obj->marks\n"; 
$obj->age = 21; 
?>

आउटपुट

Ajay 
PHP Fatal error: Uncaught Error: Cannot access private property myclass::$marks 
PHP Fatal error: Uncaught Error: Cannot access protected property myclass::$age

आउटपुट दर्शाता है कि पब्लिक प्रॉपर्टीज को क्लास के बाहर से एक्सेस किया जा सकता है, जबकि प्राइवेट और प्रोटेक्टेड प्रॉपर्टीज अनकॉट त्रुटियां फेंकती हैं।

हालांकि, प्राइवेट और प्रोटेक्टेड प्रॉपर्टीज को उसी क्लास में फ़ंक्शन के अंदर उपयोग किया जा सकता है।

उदाहरण 2: क्लास के अंदर प्राइवेट/प्रोटेक्टेड प्रॉपर्टीज

<?php 
class myclass { 
    public $fname = "Ajay"; 
    var $lname; 
    private $marks = 100; 
    protected $age = 20; 
    function displaydata() { 
        $this->lname = "Diwan"; 
        echo "$this->fname $this->lname\n"; 
        echo "marks=$this->marks age=$this->age"; 
    } 
} 
$obj = new myclass(); 
$obj->displaydata(); 
?>

आउटपुट

Ajay Diwan 
marks=100 age=20

मेथड विजिबिलिटी (Method Visibility)

क्लास प्रॉपर्टीज की तरह, क्लास मेथड्स को भी पब्लिक, प्राइवेट और प्रोटेक्टेड कीवर्ड्स के साथ विजिबिलिटी असाइन की जा सकती है। मेथड्स भी डिफ़ॉल्ट रूप से पब्लिक माने जाते हैं।

उदाहरण 3: मेथड विजिबिलिटी

<?php 
class myclass { 
    public $fname = "Ajay"; 
    var $lname; 
    private $marks = 100; 
    protected $age = 20; 
    public function setname() { 
        $this->fname = "Anil"; 
        $this->lname = "Dave"; 
        echo "name changed\n"; 
    } 
    private function setmarks() { 
        $this->marks = 90; 
    } 
    protected function setage() { 
        $this->age = 21; 
    } 
    function setdata() { 
        $this->setname(); 
        $this->setmarks(); 
        $this->setage(); 
    } 
    function displaydata() { 
        $this->lname = "Diwan"; 
        echo "$this->fname $this->lname\n"; 
        echo "marks=$this->marks age=$this->age"; 
    } 
} 
$obj = new myclass(); 
$obj->setname(); // काम करता है
$obj->setmarks(); // त्रुटि
$obj->setage(); // त्रुटि
$obj->setdata(); // पब्लिक मेथड के भीतर प्राइवेट और प्रोटेक्टेड मेथड्स कॉल किए गए
$obj->displaydata(); 
?>

आउटपुट

name changed 
PHP Fatal error: Uncaught Error: Call to private method myclass::setmarks() 
PHP Fatal error: Uncaught Error: Call to protected method myclass::setage() 
Anil Dave 
marks=90 age=21

विरासत में मेथड विजिबिलिटी (Method Visibility in Inheritance)

पैरेंट क्लास मेथड्स को चाइल्ड क्लास परिभाषा में ओवरराइड किया जा सकता है। पैरेंट के प्राइवेट और प्रोटेक्टेड मेथड्स चाइल्ड क्लास के ऑब्जेक्ट के लिए उपलब्ध नहीं होते। पैरेंट में प्रोटेक्टेड मेथड को हालांकि चाइल्ड क्लास मेथड में उपयोग किया जा सकता है।

उदाहरण 4: विरासत में विजिबिलिटी

<?php 
class testclass { 
    public $x = 10; 
    private $y = 20; 
    protected $z = 30; 
    private function test() { 
        echo "testclass private method\n"; 
    } 
    public function test1() { 
        echo "testclass public method\n"; 
    } 
    protected function test2() { 
        echo "testclass protected method\n"; 
    } 
    function test3() { 
        echo "x=$this->x y=$this->y z=$this->z\n"; 
    } 
} 
class newclass extends testclass { 
    function test1() { 
        echo "newclass public method\n"; 
    } 
    public function test4() { 
        $this->test(); 
        $this->test1(); 
        $this->test2(); 
    } 
} 
$obj = new newclass(); 
echo $obj->test1(); 
echo $obj->test3(); 
echo $obj->test4(); 
?>

आउटपुट

newclass public method 
x=10 y=20 z=30 
PHP Fatal error: Uncaught Error: Call to private method testclass::test() from context 'newclass'

कॉन्स्टेंट विजिबिलिटी (Constant Visibility)

PHP 7.1 से, विजिबिलिटी मोड्स का उपयोग कॉन्स्टेंट्स के साथ किया जा सकता है। कॉन्स्टेंट की डिफ़ॉल्ट विजिबिलिटी पब्लिक है।

उदाहरण 5: कॉन्स्टेंट विजिबिलिटी

<?php 
class testclass { 
    public const X = 10; 
    private const Y = 20; 
    protected const Z = 30; 
    function showconst() { 
        echo "x=" . self::X; 
        echo "y=" . self::Y; 
        echo "z=" . self::Z; 
    } 
} 
$obj = new testclass(); 
$obj->showconst(); 
echo testclass::Y . "\n"; 
echo testclass::Z . "\n"; 
?>

आउटपुट

x=10y=20z=30 
PHP Fatal error: Uncaught Error: Cannot access private const testclass::Y 
PHP Fatal error: Uncaught Error: Cannot access protected const testclass::Z
  1. - PHP में get_class_methods() फंक्शन

    PHP में get_class_methods() फंक्शन क्लास मेथड्स के नाम प्राप्त करता है। यह name_of_class द्वारा निर्दिष्ट क्लास के लिए परिभाषित मेथड नामों की सरणी लौटाता है। त्रुटि की स्थिति में NULL लौटाता है। सिंटैक्स get_class_methods(class) पैरामीटर्स name_of_class - क्लास नाम। आवश्यक! रिटर्न वैल्यू name_o

  1. - PHP में class_exists() फंक्शन

    PHP में class_exists() फंक्शन जांचता है कि क्लास परिभाषित की गई है या नहीं। यदि क्लास एक परिभाषित क्लास है तो TRUE लौटाता है, अन्यथा FALSE। सिंटैक्स class_exists(class, autoload) पैरामीटर्स class - क्लास का नाम। autoload - डिफ़ॉल्ट रूप से __autoload को कॉल करना है या नहीं। रिटर्न वैल्यू यदि क्ल

  1. - C# में स्टैटिक क्लास

    C# में स्टैटिक क्लास को इंस्टेंटिएट नहीं किया जा सकता और इसमें केवल स्टैटिक मेंबर्स हो सकते हैं। C# में स्टैटिक क्लास सील्ड होती है और इसमें इंस्टेंस कंस्ट्रक्टर्स नहीं हो सकते। उदाहरण using System; public static class Demo { public static float PI = 3.14f; public static int calc(int n) { re