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

PHP क्लास एब्स्ट्रैक्शन: एब्स्ट्रैक्ट क्लास और मेथड्स


परिचय

ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, एक एब्स्ट्रैक्ट क्लास वह होती है जिसे इंस्टेंशिएट नहीं किया जा सकता, यानी ऐसे क्लास का ऑब्जेक्ट घोषित करना संभव नहीं है। PHP 5.0 संस्करण से एब्स्ट्रैक्ट क्लास की अवधारणा का समर्थन करता है।

abstract कीवर्ड के साथ परिभाषित क्लास एक एब्स्ट्रैक्ट क्लास बन जाती है। इसके अलावा, कोई भी क्लास जिसमें कम से कम एक एब्स्ट्रैक्ट मेथड होता है, उसे भी एब्स्ट्रैक्ट माना जाता है।

सिंटैक्स

<?php
abstract class testclass {
    // एब्स्ट्रैक्ट मेथड्स और/या सामान्य मेथड्स
}
?>

यदि हम इस क्लास का ऑब्जेक्ट बनाने का प्रयास करते हैं, तो PHP पार्सर त्रुटि फेंकता है:

$a = new testclass();
// PHP Fatal error: Uncaught Error: Cannot instantiate abstract class testclass

एब्स्ट्रैक्ट मेथड

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

उदाहरण: सभी एब्स्ट्रैक्ट मेथड्स इम्प्लीमेंट नहीं करने पर त्रुटि

<?php
abstract class testclass {
    abstract function test1();
    abstract function hello();
}

class myclass extends testclass {
    function test1() {
        echo "Overrides parent test method";
    }
}

$a = new myclass();
?>

आउटपुट

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

आर्गुमेंट्स के साथ एब्स्ट्रैक्ट मेथड

जब एब्स्ट्रैक्ट मेथड आर्गुमेंट्स के साथ परिभाषित होता है, तो इसे चाइल्ड क्लास में समान संख्या में आर्गुमेंट्स के साथ ओवरराइड किया जाना चाहिए।

निम्न उदाहरण में, पैरेंट क्लास में एब्स्ट्रैक्ट मेथड के दो आर्गुमेंट्स हैं। चाइल्ड क्लास भी उसी फंक्शन को दो आर्गुमेंट्स के साथ परिभाषित करती है:

<?php
abstract class testclass {
    abstract function hello($name, $age);
}

class myclass extends testclass {
    function hello($name, $age) {
        echo "My name is $name and my age is $age";
    }
}

$a = new myclass();
$a->hello("Ravi", 20);
?>

आउटपुट

My name is Ravi and my age is 20

मुख्य नियम

  • एब्स्ट्रैक्ट क्लास में एब्स्ट्रैक्ट और नॉन-एब्स्ट्रैक्ट (कंक्रीट) दोनों मेथड्स हो सकते हैं।
  • एब्स्ट्रैक्ट मेथड केवल सिग्नेचर घोषित करते हैं, बॉडी नहीं (कोई ब्रेसेस नहीं)।
  • चाइल्ड क्लास को सभी एब्स्ट्रैक्ट मेथड्स इम्प्लीमेंट करने चाहिए जब तक कि वह स्वयं एब्स्ट्रैक्ट न हो।
  • विजिबिलिटी समान या कम प्रतिबंधात्मक होनी चाहिए (उदाहरण: protected → public ठीक है, public → protected नहीं)।
  • PHP 8.0+ में एब्स्ट्रैक्ट मेथड्स में रिटर्न टाइप डिक्लेरेशन अनिवार्य है यदि पैरेंट में है।

एब्स्ट्रैक्ट क्लास बनाम इंटरफेस

विशेषताएब्स्ट्रैक्ट क्लासइंटरफेस
मल्टीपल इम्प्लीमेंटेशननहीं (सिंगल इनहेरिटेंस)हां (मल्टीपल इंटरफेस)
प्रॉपर्टीज़हांकेवल कॉन्स्टेंट्स
कंस्ट्रक्टरहांनहीं
मेथड बॉडीहां (कंक्रीट मेथड्स)नहीं (केवल सिग्नेचर)
विजिबिलिटीpublic, protected, privateकेवल public
  1. - PHP में class_exists() फंक्शन

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

  1. - C# में अमूर्तता क्या है

    अमूर्तता और एनकैप्सुलेशन ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में संबंधित विशेषताएं हैं। अमूर्तता प्रासंगिक जानकारी को दृश्यमान बनाने की अनुमति देती है और एनकैप्सुलेशन एक प्रोग्रामर को वांछित स्तर की अमूर्तता को लागू करने में सक्षम बनाता है। C# में अमूर्तता को अमूर्त वर्गों का उपयोग करके प्राप्त किया जा

  1. - Java में Abstract Class

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