2015-01-13 6 views
6

क्यों PHP में चर के मानों का पालन कोड में लगातार व्यवहार नहीं है?प्री/पोस्ट वृद्धि ऑपरेटर गलत तरीके से व्यवहार क्यों करता है?

<?php 
$piece = 10; 
// output is 10 10 10 10 11 12 
echo $piece . $piece . $piece . $piece++ . $piece . ++$piece; 

$piece = 10; 
// output is 10 10 10 11 12 
echo $piece . $piece . $piece++ . $piece . ++$piece; 

$piece = 10; 
// output is 11 10 11 12 
echo $piece . $piece++ . $piece . ++$piece; 
?> 

सवाल यह है कि पिछले उदाहरण में 11 के बराबर पहला आउटपुट क्यों है? 10 के बजाय यह 2 उदाहरणों में देता है।

+0

बढ़ते/घटाने वाले ऑपरेटरों: http://php.net/manual/en/language.operators.increment.php – solar411

+0

@ solar411 क्या आप कुछ और विशिष्ट निर्दिष्ट कर सकते हैं? –

+0

यहां इसके लिए एक कोडपैड है: http://codepad.org/gEoWxshO। बहुत अजीब व्यवहार - ऐसा लगता है कि दूसरे ब्लॉक में पूर्व-वृद्धि को तीसरे ब्लॉक में पहले '$ टुकड़े 'पर फिर से निष्पादित किया गया है। या हो सकता है कि तीसरे ब्लॉक में बाद में वृद्धि जिम्मेदार है, इस मामले में, उदाहरणों के बीच असंगतता समझाया नहीं गया है। – halfer

उत्तर

6

http://php.net/manual/en/language.operators.precedence.php से:

ऑपरेटर पूर्वता और संबद्धता केवल निर्धारण कैसे भाव वर्गीकृत किया है, वे मूल्यांकन का क्रम निर्दिष्ट नहीं है। PHP (सामान्य मामले में) निर्दिष्ट करता है कि किस क्रम में एक अभिव्यक्ति का मूल्यांकन किया जाता है और कोड जो मूल्यांकन के एक विशिष्ट क्रम को मानता है, से बचा जाना चाहिए, क्योंकि व्यवहार PHP के संस्करणों या आसपास के कोड के आधार पर बदल सकता है।

<?php 
$a = 1; 
echo $a + $a++; // may print either 2 or 3 

$i = 1; 
$array[$i] = $i++; // may set either index 1 or 2 
?> 

दूसरे शब्दों में, आप अभिव्यक्ति के बाकी के संबंध में एक विशेष समय पर ++ प्रभाव लेने पर भरोसा नहीं कर सकते हैं।

+0

डाउनवॉटर: टिप्पणी करने की देखभाल? –

+0

मेरे उत्तर पर एक जगह की तरह लगता है ... –

+0

इसके बारे में नहीं पता था ... बहुत अजीब। + 1 – JorgeeFG

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