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

PHP में एब्स्ट्रैक्ट क्लास को समझाइए।

PHP5 इसके साथ ऑब्जेक्ट-ओरिएंटेड मॉडल के साथ आता है, ऑब्जेक्ट-ओरिएंटेड मॉडल की कुछ अवधारणाएँ हैं:क्लास, ऑब्जेक्ट, एनकैप्सुलेशन, पॉलीमॉर्फिज्म, एब्सट्रैक्ट और फाइनल क्लासेस, और मेथड्स, इंटरफेस और इनहेरिटेंस, आदि ... इस लेख में,

हम PHP में ऑब्जेक्ट-ओरिएंटेड तकनीकों से संबंधित Abstract Class और इसकी विशेषताओं पर चर्चा करेंगे। साथ ही, हम कुछ उदाहरणों के साथ Abstract Class के क्रियान्वयन के बारे में जानेंगे।

लेकिन, बहुत गहराई में जाने से पहले, आइए जानें कि अमूर्त वर्ग को कैसे परिभाषित किया जाए।

हम एब्सट्रैक्ट कीवर्ड के साथ क्लास के नाम को जोड़कर एक क्लास को एब्सट्रैक्ट घोषित कर सकते हैं। परिभाषा बहुत स्पष्ट है, जिस वर्ग में अमूर्त विधियाँ होती हैं उसे अमूर्त वर्ग के रूप में जाना जाता है। अमूर्त वर्ग में परिभाषित सार विधियों में केवल नाम और तर्क होते हैं, और कोई अन्य कोड नहीं होता है।

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

आइए PHP में एब्स्ट्रैक्ट क्लासेस के बारे में कुछ महत्वपूर्ण तथ्यों पर चर्चा करें:

1.एक अमूर्त वर्ग में गैर सार विधियों के साथ-साथ सार हो सकता है।

उदाहरण:

<?php
   abstract class base {
      abstract function printdata();
      public function getdata() {
         echo "Tutorials Point";
      }
   }
   class child extends base{
      public function printdata(){
         echo "Good morning";
      }
   }
   $obj = new child();
   $obj->getdata();
?>

आउटपुट:

Tutorials Point

2. सीधे इंस्टेंट नहीं किया जा सकता।

उदाहरण:

<?php
   abstract class AbstractClass{
      abstract protected function calculate();
      public function adddata() {
         echo "Addition done";
      }
   }
   $obj=new AbstractClass();
   $obj->adddata();
?>

आउटपुट:

Fatal error: Uncaught Error: Cannot instantiate abstract class AbstractClass

3. समान (या कम प्रतिबंधित) दृश्यता:

सभी चाइल्ड क्लास को पैरेंट क्लास में एब्सट्रैक्ट के रूप में चिह्नित सभी विधियों को परिभाषित करना चाहिए, इन सभी विधियों को एक ही हस्ताक्षर या कम प्रतिबंधित हस्ताक्षर के साथ परिभाषित करने की आवश्यकता है। मान लीजिए कि पैरेंट क्लास में यदि हम संरक्षित दृश्यता के साथ एक अमूर्त पद्धति को परिभाषित करते हैं, तो चाइल्ड क्लास के निष्पादन में इसे संरक्षित aorpublic के साथ परिभाषित किया जाना चाहिए, लेकिन निजी के साथ नहीं।

उदाहरण:

<?php
   abstract class AbstractBaseClass1{
      abstract public function addValue();
      abstract protected function getValue();
   }
   class ConcreteClass extends AbstractBaseClass1{
      protected function addValue() {
         return "ConcreteClass";
      }
      public function getValue() {
         return " Child Class";
      }
   }
   $classobj = new ConcreteClass;
   $classobj->addValue();
?>

आउटपुट:

Fatal errorAccess level to ConcreteClass::addValue() must be public (as in class AbstractBaseClass1)

4.एक अमूर्त विधि में मुख्य भाग नहीं हो सकता:

अमूर्त के रूप में घोषित तरीके केवल विधि के हस्ताक्षर की घोषणा करते हैं - वे अपने अंदर किसी को भी परिभाषित नहीं कर सकते हैं। हालांकि शरीर एक गैर-अमूर्त विधि के अंदर मौजूद हो सकता है।

उदाहरण:

<?php
   abstract class ParentClass{
      abstract protected function printValue(){
         return "Good morning";
      }
   }
   class ClassA extends ParentClass{
      protected function printValue() {
         return "ConcreteClass1";
      }
   }
   $classobj = new ClassA;
   $classobj->printValue();
?>

आउटपुट:

PHP Fatal error: Abstract function ParentClass::printValue() cannot contain body

5. कोई भी वर्ग जिसमें कम से कम एक सार विधि हो उसे अमूर्त वर्ग के रूप में घोषित किया जाना चाहिए:

एक अमूर्त वर्ग में अमूर्त और गैर-अमूर्त विधियाँ हो सकती हैं, लेकिन इसमें कम से कम एक सार विधि होनी चाहिए। यदि इसमें एक अमूर्त विधि है तो इसे सार के रूप में घोषित किया जाना चाहिए।

उदाहरण:

<?php
   class AbstractClass {
      abstract protected function getValue();
      public function printData() {
         echo " Welcome to Tutorials Point";
      }
   }
   $obj=new AbstractClass();
   $obj->printData();
?>

आउटपुट:

PHP Fatal error: Class AbstractClass contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (AbstractClass::getValue)

6.Abstract क्लास एकाधिक वंशानुक्रम का समर्थन नहीं करता:

यह एकाधिक वंशानुक्रम का समर्थन नहीं करता है।

उदाहरण:

<?php
   Abstract class SuperClass{
      public abstract function test();
      protected function welcome(){
         echo "Good morning";
      }
   }
   class ClassA extends SuperClass{
      public function test(){
         echo "Hello";
      }
      protected function welcome(){
         echo "Good afternoon";
      }
   }
   class ClassB extends SuperClass{
      public function test(){
         echo "Hello";
      }
      protected function welcome(){
         echo "Good evening";
      }
   }
   class ClassC extends ClassA, ClassB{
      public function test1(){
         $c = new self();
         $c->welcome();
      }
   }
?>

आउटपुट:

Error

स्पष्टीकरण:

यहां हमने सुपरक्लास को एक अमूर्त वर्ग के रूप में घोषित किया है जिसमें एक विधि परीक्षण () और स्वागत () और, क्लासए और क्लासबी और ठोस वर्ग एक अमूर्त वर्ग से विस्तारित हैं। फिर हमने ClassA और ClassB से विस्तारित ClassC बनाने का प्रयास किया है। जैसा कि कोड से स्पष्ट है, ऑब्जेक्ट क्लाससी का उपयोग करके वेलकम () विधि को कॉल करने पर, कंपाइलर के लिए यह चुनना असंभव है कि उसे क्लासए के वेलकम () या क्लासबी के वेलकम () मेथड को कॉल करना है या नहीं। इसलिए, ऐसी जटिलताओं से दूर रहने के लिए, PHP एकाधिक वंशानुक्रम का समर्थन नहीं करता है।

नोट:

एक अमूर्त वर्ग दूसरे अमूर्त वर्ग का विस्तार कर सकता है, सार वर्ग इंटरफ़ेस का कार्यान्वयन प्रदान कर सकता है।


  1. PHP में फाइनल क्लास और फाइनल मेथड को समझाइए।

    अंतिम कीवर्ड PHP5 द्वारा ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग कॉन्सेप्ट से संबंधित है। लेकिन फाइनल में जाने से पहले, हमें यह सुनिश्चित करना होगा कि हमें विरासत की अवधारणा की अच्छी समझ है। इनहेरिटेंस में, हम एक क्लास को दूसरे क्लास से इनहेरिट कर सकते हैं। साथ ही, हम मूल रूप से प्रदान किए गए व्यवहार को प्र

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

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

  1. जावा में सार वर्ग

    जिस वर्ग की घोषणा में सार कीवर्ड होता है उसे अमूर्त वर्ग के रूप में जाना जाता है। एब्स्ट्रैक्ट क्लासेस में एब्सट्रैक्ट मेथड्स हो भी सकते हैं या नहीं भी हो सकते हैं, यानी बॉडी के बिना मेथड्स ( public void get(); ) लेकिन, यदि किसी वर्ग में कम से कम एक सार विधि है, तो कक्षा को सार घोषित किया जाना चाहि