मैं आज हमारे कुछ 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);
बजाय इस (ओपी से) की
(एक मौजूदा विधि कॉल करने की कोशिश कर रहा:
आप अपलोड समारोह के अंदर एक गूंज डाला? –
इसे कहीं से ओवरराइड किया जा सकता है? – Greg
@ चाचा: हमने अपलोड फ़ंक्शन के अंदर एक गूंज डाली। यह अपेक्षित मूल्य दिया। @ ग्रेग: एफ़ाइल कक्षा में बच्चे नहीं हैं (अभी तक) इसलिए इसकी विधियों को अधिक से अधिक नहीं किया जाना चाहिए। – dnagirl