2009-07-23 19 views
5

मैं आज हमारे कुछ PHP कोड में एक बहुत ही अजीब व्यवहार में भाग गया। फाइलों से निपटने के लिए हमारे पास एक कक्षा है। यह कुछ इस तरह है:असूचीबद्ध आरक्षित शब्द?

class AFile { 

//usual constructor, set and get functions, etc. 
//... 

    public function save() { 
    //do some validation 
    //... 

    if($this->upload()) { //save the file to disk 
     $this->update_db(); //never reached this line 
    } 
    } 

    private function upload() { 
    //save the file to disk 
    //... 
    return ($success) ? true : false; 
    } 
} 

यह हमारे लिए बहुत सामान्य देखा, लेकिन $ this-> अपलोड() फ़ंक्शन कुछ भी लेकिन शून्य कभी नहीं लौटे। हमने जांच की है कि सही कार्य चल रहा था। हमने लौटने से पहले इसके रिटर्न वैल्यू को प्रतिबिंबित किया। हमने केवल एक वास्तविक मूल्य या यहां तक ​​कि एक स्ट्रिंग को वापस करने का प्रयास किया। सब ठीक से जांच कर रहा था। लेकिन $ यह-> अपलोड अभी भी पूर्ण करने के लिए मूल्यांकन किया गया। इसके अलावा, लॉग में कुछ भी नहीं था और ERROR_ALL चालू है।

क्रोध में हम foo_upload को समारोह नाम बदल दिया। अचानक सब कुछ काम किया। "अपलोड" PHP reserved words की सूची में नहीं है। किसी के पास कोई विचार है कि "अपलोड" नामक क्लास फ़ंक्शन क्यों विफल हो जाएगा?

if($a = $this->upload) { // => NULL 
    $this->update_db(); //never reached this line 
} 
var_dump($a); 
बजाय इस (ओपी से) की

(एक मौजूदा विधि कॉल करने की कोशिश कर रहा:

+0

आप अपलोड समारोह के अंदर एक गूंज डाला? –

+0

इसे कहीं से ओवरराइड किया जा सकता है? – Greg

+0

@ चाचा: हमने अपलोड फ़ंक्शन के अंदर एक गूंज डाली। यह अपेक्षित मूल्य दिया। @ ग्रेग: एफ़ाइल कक्षा में बच्चे नहीं हैं (अभी तक) इसलिए इसकी विधियों को अधिक से अधिक नहीं किया जाना चाहिए। – dnagirl

उत्तर

1

एक तरह से जब "को" यदि आप था यह (एक inexisting संपत्ति का उपयोग करने की कोशिश कर रहा है) अपलोड किया जाएगा अशक्त पाने के लिए):

if($a = $this->upload()) { // => true or false 
    $this->update_db(); //never reached this line 
} 
var_dump($a); 

क्या आपने जांच की है कि () नहीं भूल गए?

यदि यह इस नहीं है, E_ALL करने के लिए सेट error_reporting साथ प्रयास करें, और त्रुटियों को प्रदर्शित:

ini_set('display_errors', true); 
error_reporting(E_ALL); 

(तुमने कहा "ERROR_ALL पर है", तो यकीन नहीं यह आप क्या मतलब है)

+0

क्षमा करें, मेरा मतलब त्रुटि_ रिपोर्टिंग (E_ALL) है। कोष्ठक मौजूद हैं और एक ही नाम के साथ कोई ऑब्जेक्ट वर्र्स नहीं हैं। जैसा कि आप सुझाव देते हैं, हमने $ var-> अपलोड() में $ var के परिणाम को पकड़ने का प्रयास किया था। इससे कोई फर्क नहीं पड़ता। – dnagirl

+0

ठीक है :-(वास्तव में जवाब जानने में दिलचस्पी है, तो –

2

सुनिश्चित करें कि अपलोड विधि के अंत में वापसी विवरण उस विधि में एकमात्र वापसी विवरण है।

+0

यह है। लेकिन यह एक बहुत अच्छा मुद्दा है। – dnagirl

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