यह एक 'हैक' का थोड़ा सा हो सकता है, लेकिन बहुत कम प्रयास के साथ नौकरी करता है, लेकिन अगर बच्चे वर्ग में निरंतर घोषित नहीं किया जाता है तो एक अलग त्रुटि संदेश के साथ।
एक स्वयं निर्देशात्मक लगातार घोषणा वाक्य रचना सही है और समस्या के बिना पार्स करता है, केवल एक त्रुटि फेंक अगर उस घोषणा वास्तव में, रनटाइम पर निष्पादित किया जाता है तो अमूर्त वर्ग में एक आत्म निर्देशात्मक घोषणा चाहिए एक बच्चे कक्षा में अधिरोहित जा अन्यथा घातक त्रुटि होगी: Cannot declare self-referencing constant
।
इस उदाहरण में, सार, मूल वर्ग Foo
अपने सभी बच्चों को परिवर्तनीय NAME
घोषित करने के लिए मजबूर करता है। यह कोड Donald
आउटपुट को ठीक करता है।हालांकि, अगर बच्चे वर्ग Fooling
नहीं चर घोषित करता है, तो घातक त्रुटि ट्रिगर की जाएगी।
<?php
abstract class Foo {
// Self-referential 'abstract' declaration
const NAME = self::NAME;
}
class Fooling extends Foo {
// Overrides definition from parent class
// Without this declaration, an error will be triggered
const NAME = 'Donald';
}
$fooling = new Fooling();
echo $fooling::NAME;
एक बार यह प्रत्येक स्कोप, फ़ंक्शन विधि या क्या नहीं है, इसे एक बार सेट करने के लिए एक पूर्ण दायरा है। इसका कोई मतलब नहीं है, कृपया कुछ और प्रदान करने के लिए कुछ कोड प्रदान करें। –
या तो अमूर्त वर्ग में निरंतर परिभाषित करें (इस प्रकार प्रत्येक बाल वर्ग में निरंतर होता है, भले ही यह स्वयं परिभाषित न हो), या एक अमूर्त कार्य का उपयोग करें (जो प्रत्येक बच्चे वर्ग को स्वयं परिभाषित करने के लिए मजबूर करता है)। संपादित करें: आपके प्रश्न का संक्षिप्त उत्तर नहीं है। – halfer