संदर्भ द्वारा नए के रिटर्न वैल्यू को असाइन करना PHP 5.3 में deprecated पर संदर्भित किया गया है। इस प्रकार,PHP 5.3 और संदर्भ
$obj =& new Foo();
अब E_DEPRECATED
त्रुटि फेंकता है।
बहुत सारे विरासत कोड 5.3 के साथ बड़े एप्लिकेशन को अपग्रेड करते समय, इससे बहुत सारी अवांछित सूचनाएं होती हैं।
इस समस्या के संभावित समाधान के रूप में, मैं =& new
के = new
के सभी उदाहरणों को खोजने और बदलने के लिए नियमित अभिव्यक्ति का उपयोग करने पर विचार कर रहा हूं। उदाहरण के लिए, निम्नलिखित सभी PHP फ़ाइलों मिल जाए, और =& new
के सभी उदाहरणों का सफाया होगा:
find ./ -name '*.php' | xargs perl -p -i -e 's/=(\s*)&(\s*)?new\b/= new/g'
निम्नलिखित प्रश्नों के उत्तर के लिए खोज रहे:
- यह ठीक काम करेगा? मैं किस संभावित मुद्दे में भाग सकता हूं?
- यदि नहीं, तो
=& new
को= new
के साथ प्रतिस्थापित करने वाले कोड के उदाहरण PHP 5.3 में व्यवहार को बदल देंगे। - इस के साथ लोकप्रिय पुस्तकालयों के किसी भी उदाहरण को समस्या का कारण माना जाएगा।
=& new
की भारी मात्रा में फ़िक्सिंग के साथ निपटने के लिए आप अन्य विचारों की क्या सलाह देते हैं?
मुझे संदेह है कि यह ठीक काम करेगा, लेकिन किनारे के मामलों की तलाश में जहां मैं परेशानी में भाग सकता हूं। हां, मुझे पता है कि मैं सिर्फ त्रुटि रिपोर्टिंग सेटिंग्स बदल सकता हूं। लेकिन मैं नोटिस छिपाना नहीं चाहता, मैं उन्हें ठीक करना चाहता हूं।
E_DEPRECATED नोटिस की श्रेणी से संबंधित है, त्रुटियों में नहीं। मुझे यकीन नहीं है कि आपको इसे ठीक करने के साथ जल्दी करने की आवश्यकता है (magic_quotes को php 4.2 या तो में बहिष्कृत घोषित किया गया था)। रेगेक्स के लिए: आपको 'new' के बाद '\ b' जोड़ना चाहिए, लेकिन अन्यथा यह एक व्यावहारिक पुनर्लेखन दृष्टिकोण है। लेकिन आप केवल तभी परीक्षण कर सकते हैं जब यह अपेक्षित प्रसंस्करण तर्क को कम कर देता है (हालांकि असंभव)। – mario
@ मारियो E_DEPRECATED बस एक त्रुटि * स्तर * है। इसे किसी भी तरह से संदर्भित करना उचित होगा। \ B हालांकि के साथ अच्छा बिंदु। – mfonda