2012-05-06 10 views
6
$a = 'a'; 
print ($a+1); 
print ($a++); 
print $a; 

उत्पादन होता है: 1 a bवृद्धि चरित्र काम करता है लेकिन जोड़ना नहीं करता है। क्यूं कर?

तो यह स्पष्ट है कि वेतन वृद्धि ऑपरेटर अपने काम किया है, लेकिन मुझे समझ नहीं आता क्यों उत्पादन '1' मामले $a+1 में है। क्या कोई समझा सकता है?

उत्तर

7

पीएचपी, सी नहीं है तो 'a' + 1'b' नहीं है।

'a' एक संख्यात्मक संदर्भ में 0, और 0+1 = 1 है।

php> echo (int)'a'; 
0 

तथ्य यह है कि पोस्टफ़िक्स/उपसर्ग वेतन वृद्धि ऑपरेटरों काम करता है, तो यह एक सी चार था पसंद है एक बुरा PHP के "सुविधा" हो रहा है। खासकर जब से कमीशन ऑपरेटर इस मामले में नो-ऑप हैं।

जब आप 'z' को बढ़ा देते तो यह और भी खराब हो जाता है:

php> $a = 'z'; 
php> echo ++$a 
aa 
+0

आपका क्या मतलब है? : "खासकर जब से कमीशन ऑपरेटर इस मामले में नो-ऑप हैं"। – Shubham

+1

वास्तव में, मैं इसे अनिवार्य रूप से अजीब नहीं कहूंगा। यह अनिवार्य रूप से 25 के आधार (संख्याओं के बजाय अक्षरों के साथ) का उपयोग कर मानक गणितीय नियमों का पालन करना है। – Mario

+0

@ शुभम "नो-ऑप" का अर्थ है "कोई ऑपरेशन नहीं", यानी कुछ भी नहीं होता है। यह पहले उदाहरण से ठीक पहले समझाया गया है: http://php.net/manual/en/language.operators.increment.php – Mario

1

कारण PHP एक संदर्भ विशिष्ट तरीके से चर का इलाज है। यह विजुअल बेसिक के समान ही है।

अभिव्यक्ति 'a' + 1 गणितीय जोड़ का उपयोग करता है। इस संदर्भ में a को एक संख्या के रूप में व्याख्या किया गया है, इसलिए इसे 0 माना जाएगा (यदि आप सी से परिचित हैं, तो यह atoi() में स्ट्रिंग "ए" को खिलाने जैसा है)।

यदि आप अभिव्यक्ति 'a' . 1 अभिव्यक्ति का उपयोग करेंगे तो परिणाम a1 स्ट्रिंग concatenation का उपयोग कर इसके कारण होगा।

परिणाम प्राप्त करने के लिए आपको उम्मीद है (b), आपको chr(ord('a') + 1) का उपयोग करना होगा, जहां ord() स्पष्ट रूप से (पहले) वर्ण के ASCII मान को लौटाता है।

$a++ एक विशेष मामला है, अनिवार्य रूप से एक अधिभार चर के रूप में मूल्य ही के बजाय ascii मूल्य पर देख रहा है।

0

जब आप कोई अतिरिक्त प्रदर्शन करते हैं, तो PHP 'ए' को एक पूर्णांक में बदलने का प्रयास करता है। जैसे कि आप सी में एटोई का उपयोग करना चाहते थे, 'ए' 0 के रूप में घुसपैठ कर दिया गया है। इसलिए 0 + 1 है 1.

+0

दस्तावेज है, लेकिन '$ a ++' '' a' के मान को 'बी' में क्यों बदलता है और '1' नहीं? – JJJ

+0

वृद्धि के रूप में वृद्धि एक ही ऑपरेशन नहीं है। PHP पर्ल के सम्मेलन का पालन करता है। इसे देखें: http://php.net/manual/en/language.operators.increment.php – root

1

http://php.net/manual/en/types.comparisons.php से, "ए" +1 0 + 1 के रूप में निष्पादित किया गया है। जहां कुछ भाषाएं (सी #) अनुवाद (स्ट्रिंग) + (int) से (स्ट्रिंग) + (स्ट्रिंग) का अनुवाद करेगी, PHP विपरीत है: (int) + (int)। "a" . 1 पैदावार 'a1':

बजाय स्ट्रिंग संयोजन बाध्य करने के लिए।

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

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