2016-12-12 10 views
7

जोड़ सकते हैं क्या कोई यह समझा सकता है कि ये 2 समान परिणाम क्यों उत्पन्न करते हैं?php परिणामस्वरूप विभिन्न प्रकार के वर्र्स

$a = 1; 
$c = $a + $a++; 
var_dump($c);//int(3) 

और

$a = 1; 
$c = $a + $a + $a++; 
var_dump($c);//int(3) 

पीएचपी 7.1 में परीक्षण किया गया। दोनों मामलों के लिए समीक्षा ओपोड डंप लेकिन अभी भी बिंदु नहीं मिल सकता है। यदि हम अभिव्यक्ति में अधिक $ एक वर्र्स जोड़ते हैं, तो यह अपेक्षित परिणाम उत्पन्न करता है।

+0

मैं यह इंगित कर सकता है कि इस 'var_dump ((int) ((0.1 + 0.7) * 10) के समान है) // // int (7) '([एक फ्लोट सटीक समस्या] (http://titanic.fauser.edu/php/लैंग uage.types.float.php.htm # चेतावनी.फ्लोट-परिशुद्धता))। लेकिन मैं वास्तव में नहीं जानता। –

+0

यह भी देखें https://3v4l.org/3bWI0 – bishop

+1

यह यहां समझाया गया है: https://gist.github.com/nikic/6699370 एसओ पर शायद एक या दस डुप्लिकेट भी हैं। – NikiC

उत्तर

8
PHP: Operator Precedence से

:

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

उदाहरण # मूल्यांकन के 2 अपरिभाषित आदेश

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

$i = 1; 
$array[$i] = $i++; // may set either index 1 or 2 
अपने पहले उदाहरण में

तो, पीएचपी जाहिर $a++ के लिए 1 लौटा रहा है तो 2 करने के लिए इसे बढ़ाने और फिर नए $a, जो 2 है जोड़ने ।

अपने दूसरे उदाहरण में, PHP के लिए $a तो $a जोड़ने तो $a जोड़ने और फिर 2 करने के लिए इसे बढ़ाने 1 लौटा रहा है।

के रूप में यहां देखा जा सकता: https://3v4l.org/kvrTr:

पीएचपी 5.1.0 - 7.1.0

int(3) 
int(3) 

पीएचपी 4.3.0 - 5.0.5

int(2) 
int(3) 
+0

क्या यह एक बग या सुविधा है? यह जावास्क्रिप्ट में भी होता है 'var a = 1; var c = a + a ++; console.log (सी); var a = 1; var c = a + a + a ++; console.log (सी); ' – jycr753

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