SplQueue
SplDoublyLinkedList
से विरासत प्राप्त करता है। इन वर्गों में से कोई भी अपने स्वयं के निर्माता को परिभाषित नहीं करता है। इसलिए कॉल करने के लिए कोई स्पष्ट अभिभावक कन्स्ट्रक्टर नहीं है, और आपको ऐसी त्रुटि मिलती है। दस्तावेज इस पर थोड़ा भ्रामक है (क्योंकि यह कई एसपीएल वर्गों के लिए है)।
त्रुटि को हल करने के लिए, मूल निर्माता को कॉल न करें।
अब, सबसे वस्तु उन्मुख भाषाओं में, आप अगर वहाँ एक स्पष्ट निर्माता एक वर्ग में घोषित नहीं किया है डिफ़ॉल्ट निर्माता कहा जा करने की उम्मीद की जाती है। लेकिन यहां पकड़ है: PHP कक्षाओं में डिफ़ॉल्ट निर्माता नहीं हैं! एक वर्ग में एक कन्स्ट्रक्टर है और केवल अगर किसी को परिभाषित किया गया है।
वास्तव में, प्रतिबिंब का उपयोग stdClass
वर्ग का विश्लेषण करने के लिए, हम भी देख सकते हैं कि एक निर्माता का अभाव:
$c = new ReflectionClass('stdClass');
var_dump($c->getConstructor()); // NULL
SplQueue
और SplDoublyLinkedList
के निर्माताओं को प्रतिबिंबित करने के प्रयास कर रहा है दोनों के रूप में अच्छी उपज NULL
।
मेरा अनुमान है कि जब आप एक वर्ग का दृष्टांत को पीएचपी बता, यह सब आंतरिक स्मृति आवंटन यह नई वस्तु के लिए की जरूरत है करता है, तो एक निर्माता परिभाषा के लिए लग रहा है और यह कहता है केवल तभी एक __construct()
या <class name>()
की परिभाषा है पाया जाता है। मैं सोर्स कोड पर एक नज़र डालने के लिए गया, और ऐसा लगता है कि PHP केवल कॉलक करता है और मर जाता है जब इसे कॉल करने के लिए कोई कन्स्ट्रक्टर नहीं मिल रहा है क्योंकि आपने इसे उप-वर्ग में स्पष्ट रूप से बताया है (zend_vm_def.h
देखें)।
जिज्ञासा से बाहर, आप कतार कक्षा का विस्तार क्यों कर रहे हैं? आपको सजावट करने की क्या ज़रूरत नहीं है? – ircmaxell