परिचय
ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में, एक अमूर्त वर्ग वह होता है जिसे तत्काल किया जा सकता है, यानी ऐसे वर्ग की वस्तु घोषित करना संभव नहीं है। PHP संस्करण 5.0 के बाद से अमूर्त वर्ग की अवधारणा का समर्थन करता है
अमूर्त कीवर्ड के साथ परिभाषित एक वर्ग एक अमूर्त वर्ग बन जाता है। इसके अलावा, कोई भी वर्ग जिसमें कम से कम एक सार पद्धति हो, उसे भी सार माना जाता है।
सिंटैक्स
<?php 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