Strange behaviour of ++ operator in PHP 5.3 -


निम्नलिखित कोड देखें:

  $ a = 'test'; प्रतिध्वनि ++ $ a;  

यह आउटपुट होगा:

  Tesu  

प्रश्न है, क्यों?

I "यू" के बाद "टी" पता है, लेकिन यह क्यों "1" प्रिंट नहीं करता ???

संपादित करें: बेक्यूज़ ज़ेंड किताबें निम्नलिखित सिखाने वाली हैं:

< ब्लॉककॉट>

इसके अलावा, परिवर्तनीय वृद्धिशील या घटित होने के लिए उपयुक्त संख्यात्मक डेटा प्रकार में परिवर्तित किया जाएगा- इस प्रकार, निम्नलिखित कोड 1 वापस आएगा, क्योंकि स्ट्रिंग टेस्ट पहले पूर्णांक संख्या 0 में परिवर्तित कर दी गई है, और उसके बाद incremented। < PHP में आप स्ट्रिंग्स बढ़ा सकते हैं (लेकिन आप जोड़ ऑपरेटर के उपयोग से "वृद्धि" स्ट्रिंग नहीं कर सकते हैं। / P>

, क्योंकि इसके अतिरिक्त ऑपरेटर एक स्ट्रिंग को int में डाला जाएगा, आप केवल वेतन वृद्धि ऑपरेटर को "वृद्धि" स्ट्रिंग्स का उपयोग कर सकते हैं! ... पिछले उदाहरण देखें):

< P> तो "a" + 1 है "b" के बाद "z" आता है "aa" और इसलिए पर।

इसलिए "टेस्ट" के बाद आओ एस "Tesu"

आपको PHP के स्वचालित प्रकार के जबरन का उपयोग करते समय ऊपर की तरफ देखना होगा।

स्वचालित टाइप बलात्कार:

  & lt; php $ a = "+ 10.5"; प्रतिध्वनि ++ $ a; // आउटपुट: 11.5 // स्वचालित प्रकार के जबरन "intuitively" काम किया? & Gt;  


कोई स्वचालित टाइप बलात्कार नहीं! (एक स्ट्रिंग बढ़ाना):

  & lt;? Php $ a = "$ 10.5"; प्रतिध्वनि ++ $ a; // आउटपुट: $ 10.6 / $ $ को स्ट्रिंग के रूप में पेश किया गया था! ? & Gt;  



यदि आप एएससीआई के अक्षरों के आदेशों से निपटना चाहते हैं, तो आपको कुछ अतिरिक्त कार्य करना होगा।

यदि आप अपने एएससीआई ऑर्डर्स में अक्षर परिवर्तित करना चाहते हैं तो का उपयोग करें, लेकिन यह केवल एक बार में एक पत्र पर काम करेगा।

  & lt;? Php $ a = " परीक्षण"; विदेशी मुद्रा (str_split ($ a) $ मान) {$ a + = ord ($ value); // स्ट्रिंग + संख्या = संख्या / / तार केवल वेतन वृद्धि ऑपरेटर को संभाल कर सकते हैं / न कि अतिरिक्त ऑपरेटर (अतिरिक्त ऑपरेटर // स्ट्रिंग को एक पूर्णांक में डाल देगा) } प्रतिध्वनि ++ $ a; ? & Gt;  

उपरोक्त इस तथ्य का उपयोग करता है कि स्ट्रिंग्स को केवल PHP में ही बढ़ाया जा सकता है अतिरिक्त ऑपरेटर का उपयोग करके उन्हें बढ़ाया नहीं जा सकता। स्ट्रिंग पर किसी अतिरिक्त ऑपरेटर का उपयोग करने के कारण इसे int पर डाल दिया जाएगा, इसलिए:

स्ट्रिंग्स को अतिरिक्त ऑपरेटर के उपयोग से "बढ़ नहीं" किया जा सकता है:

  & lt;? Php $ a = 'टेस्ट'; $ A = $ a + 1; प्रतिध्वन करें $ a; // आउटपुट: 1 // स्ट्रिंग्स "इन्हें जोड़ा नहीं जा सकता", वे केवल ++ / $ का उपयोग करके वृद्धि कर सकते हैं ऊपर $ $ = ((int) $ a) +1 करता है; ? & Gt;  

उपरोक्त " टेस्ट " को (int) में जोड़ने से पहले 1 डालने का प्रयास करेंगे। 0


में (int) परिणाम के लिए " टेस्ट " कास्टिंग करना स्ट्रिंग कम नहीं कर सकते हैं :

ध्यान दें कि वर्ण चर बढ़े हुए हैं, लेकिन घटाए नहीं हैं और यहां तक ​​कि केवल सादे ASCII वर्ण (एज़ और एजेड) समर्थित हैं।

पिछला अर्थ यह है कि प्रतिध्वनिका - $ a; वास्तव में टेस्ट को स्ट्रिंग बदलकर बिना प्रिंट करेगा।



Comments