2010-01-23 17 views
6

में स्थिर कार्य में बच्चे के निरंतर उपलब्ध नहीं है, मेरे पास कक्षा में एक स्थिर कार्य है जिसे कई बाल वर्गों से बुलाया जाना चाहिए। मुझे उस समारोह में कॉल करने वाले बच्चे वर्ग से निरंतर आवश्यकता है। इन स्थिरांकों को अन्य स्थानों पर उपलब्ध कराने के लिए, बाल वर्गों में एक ऐसा कार्य होता है जो उस स्थिरांक (PHP 5.2.9) का मान देता है।अभिभावक

हालांकि, जब अभिभावक वर्ग में, मैं उस स्थिरता तक नहीं पहुंच सकता, न कि फ़ंक्शन के साथ और सीधे। क्या यह PHP 5.2.9 में भी संभव है या क्या मुझे इसे तर्क के रूप में पास करने की आवश्यकता है?

यह एक सरल कोड का संस्करण है:) (समारोह के लिए)

  • कॉल अपरिभाषित विधि ParentClass को :: show_const (:

    abstract class ParentClass { 
        static function DoSomething() { 
         $not_working = self::show_const(); 
         $not_working_either = self::SOME_CONST; 
    
         return 'working'; 
        } 
    } 
    
    class ChildClass extends ParentClass { 
        const SOME_CONST = 'some string'; 
    
        function show_const() { 
         return self::SOME_CONST; 
        } 
    } 
    
    $result = ChildClass::DoSomething(); 
    

    संपादित करें: उत्पन्न त्रुटि है

  • अपरिभाषित वर्ग निरंतर 'SOME_CONST' (स्वयं :: SOME_CONST का उपयोग करके)
+0

क्या त्रुटि संदेश उत्पन्न किया जा रहा है है? –

उत्तर

13

दुर्भाग्य से, आप जो करने की कोशिश कर रहे हैं वह प्री 5.3 काम नहीं करेगा। यहां समस्या शुरुआती स्थिर बाध्यकारी बनाम देर से स्थैतिक बाध्यकारी है। self कीवर्ड जल्दी से बांधता है, इसलिए यह केवल उस कक्षा में दिखता है जहां इसका उपयोग प्रतीकों को हल करने के लिए किया जाता है। जादू स्थिर __CLASS__ या फ़ंक्शन get_class() या तो काम नहीं करेगा, ये प्रारंभिक स्थैतिक बाध्यकारी भी करते हैं। इस कारण से PHP 5.3 ने static::some_method() के रूप में उपयोग किए जाने पर देर से बाध्यकारी होने के लिए static कीवर्ड का विस्तार किया।

तो 5.3 में यह काम करेगा:

abstract class ParentClass { 
    public static function DoSomething() { 
    return static::show_const(); 
    // also, you could just do 
    //return static::SOME_CONST; 
    } 
} 

class ChildClass extends ParentClass { 
    const SOME_CONST = 'some string'; 
    public static function show_const() { 
    return self::SOME_CONST; 
    } 
} 

$result = ChildClass::DoSomething(); 
+0

धन्यवाद, मैं उससे डरता था। वैसे, एकमात्र कारण मैं निरंतर लौटने के लिए एक फ़ंक्शन का उपयोग कर रहा हूं, यह है कि यह php <5.3 ... – jeroen

+0

+1 में ऑब्जेक्ट्स पर उपलब्ध कराने का एकमात्र तरीका है - स्थिर :: methodName() वाक्यविन्यास मेरे लिए खबर है :-) –

+0

+1 एलएसबी की कमी वास्तव में PHP (प्री 5.3) में दर्द को ओओ कोड विकसित कर सकती है। – nategood

2

आप ChildClass माता पिता वर्ग :: विस्तार करने की जरूरत है

class ChildClass extends ParentClass { 

संपादित करें:

आप माता-पिता वर्ग जो ऐसा नहीं करता से बच्चे कक्षा में एक स्थिर और विधि का उल्लेख करने की कोशिश कर रहे बाल वर्ग 'निरंतर मौजूद है पता है। यह एक गुंजाइश मुद्दा है। बच्चा माता-पिता के तरीकों और स्थिरांक को संदर्भित कर सकता है लेकिन इसके विपरीत नहीं।

+0

उदाहरण में मेरी तरफ से यह एक त्रुटि है, मैंने सवाल को सही किया है। – jeroen

+0

+1 संक्षेप में व्यक्त किया गया। –

+0

स्पष्ट रूप से आप सही हैं, क्योंकि यह काम नहीं कर रहा है, लेकिन मैं वास्तव में बाल वर्ग को बुला रहा हूं, न कि अभिभावक वर्ग (हालांकि समारोह मूल वर्ग में रहता है ..), इसलिए यह मेरे लिए तार्किक लगेगा कि यह गुण है उपलब्ध होगा। फिर भी धन्यवाद! – jeroen

संबंधित मुद्दे