2012-02-15 20 views
5

में दो बार कॉल करता रहता है मैंने एक ऑटोलोडर क्लास बनाया है जो इरादे से काम करता है, लेकिन मैंने एक अजीब व्यवहार देखा है। जब मैं spl_autoload_register() फ़ंक्शन को संभालने वाली विधि को पारित कक्षाओं के परिणामों को प्रतिबिंबित करता हूं। मैं देख रहा हूं कि मेरे पास युगल है। जैसे कि स्क्रिप्ट को दो बार बुलाया जाता है, और क्योंकि यह एक सिंगलटन डेटा मेरे मामले में 2 सरणी बनाता है।php सिंगलटन खुद को ऑटोलोडर वर्ग

मैं इस पद्धति का उपयोग कर रहा हूँ मेरी सिंगलटन

public static function init() 
{ 
    if (!isset(self::$instance)) 
     self::$instance = new self(); 

    return self::$instance; 
} 

बनाने के लिए मैं तो निर्माता निजी के लिए सेट है। मैं यह देखने की कोशिश कर रहा हूं कि यह एक क्लोन बनाने के लिए कहां दिखाई देता है, प्रत्येक विधि डीबगिंग के माध्यम से चला गया है।

मुझे संदेह है कि उस वर्ग के लिए मेरी कक्षाएं और कक्षा को spl_autoload_register() फ़ंक्शन में कहीं भी क्लोन किया जा रहा है।

किसी भी मदद की सराहना की जाएगी।

+0

आप __clone समारोह अनुसार सेट है? – busypeoples

+0

क्या आप पूर्ण कक्षा कोड पोस्ट कर सकते हैं? – busypeoples

+0

ठीक है, पोस्ट किया गया। अगर मैं इसे गैर सिंगलटन उदाहरण के रूप में चलाता हूं तो यह स्वयं क्लोन नहीं होगा। – Eli

उत्तर

3

निर्माता को कुछ प्रिंट करने दें। बस यह देखने के लिए कि क्या इसे वास्तव में एक से अधिक बार बुलाया जा रहा है। आप दो ऑटोलोडर्स का उपयोग कर रहे हैं? मैं एप्लिकेशन की शुरुआत (शायद index.php) पर sp_autoload_register सेट अप करता हूं और सभी आवश्यक ऑटोलोडर पंजीकृत करता हूं। लेकिन परीक्षण करें कि क्या निर्माता को पहले एक से अधिक बार बुलाया जा रहा है।

// पहले मैं इस बदल जाएगा:

private static $instance = null; 

// init समारोह

public static function init() { 
    if (self::$instance === null) { 
    self::$instance = new Autoload(); 
    } 

    return self::$instance; 
} 
+0

मैंने एक काउंटर सेट किया और क्लास को हर बार चलाया जाता था। और यकीन है कि मुझे यह +1 मिल जाएगा। आप चाहते हैं कि मैं spl_autoload_register कहां रखूं? मैं एक बार अपने index.php में एक बार इस स्क्रिप्ट को बुला रहा हूँ। मैंने अपने अपडेट कोड के साथ भी अपनी पोस्ट अपडेट की है – Eli

+0

मुझे पंजीकरण विधि के अंदर इस बारे में निश्चित नहीं है: spl_autoload_register (array ('Autoloader', 'loadClass')); – busypeoples

+0

हम्म, मैं मूल रूप से सिंगलटन मार्ग पर जाने से पहले 'spl_auto_register (' self :: autoload() ') पर सेट किया था। – Eli