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

PHP दृश्यता मोड

परिचय

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

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

संपत्ति दृश्यता

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

उदाहरण

<?php
class myclass{
   public $fname="Ajay";
   var $lname; //treated as public
   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

हालांकि, निजी और संरक्षित गुणों का उपयोग एक ही कक्षा में फ़ंक्शन के अंदर किया जा सकता है

उदाहरण

<?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

विधि दृश्यता

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

उदाहरण

<?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();//works
$obj->setmarks();//error
$obj->setage();/error
$obj->setdata(); //private and protected methods called withing public method
$obj->displaydata();
?>

आउटपुट

यह निम्नलिखित परिणाम देगा। -

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

विरासत में विधि दृश्यता

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

उदाहरण

<?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'

निरंतर दृश्यता

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

उदाहरण

<?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 () फ़ंक्शन

    get_class_methods() फ़ंक्शन को वर्ग विधियों के नाम मिलते हैं। यह name_of_class द्वारा निर्दिष्ट वर्ग के लिए परिभाषित विधि नामों की एक सरणी देता है। त्रुटि के मामले में, यह NULL देता है। सिंटैक्स get_class_methods(class) पैरामीटर name_of_class - वर्ग का नाम। आवश्यक! वापसी get_class_methods() फ

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

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

  1. सी # में स्टेटिक क्लास

    सी # स्थिर वर्ग को तत्काल नहीं किया जा सकता है और केवल स्थिर सदस्य ही हो सकते हैं। C# में स्थिर वर्ग को सील कर दिया गया है और इसमें इंस्टेंस कंस्ट्रक्टर नहीं हो सकते हैं। निम्नलिखित स्थिर वर्ग और स्थिर सदस्यों के साथ एक उदाहरण है - उदाहरण using System; public static class Demo {    publi