दिलचस्प पोस्ट
कुछ जावा मेमोरी प्रबंधन सर्वोत्तम अभ्यास क्या हैं? कैसे बाइट सरणी से बिटमैप बनाने के लिए? PHP में अजाक्स का पता लगाने और सुनिश्चित करने का अनुरोध मेरी अपनी वेबसाइट से था एक जेएसएफ में स्पॉइंग थ्रेड्स अनुक्रमित कार्य के लिए टाइमर का इस्तेमाल करते हुए बीन प्रबंधित करते थे MySQL में एक को छोड़कर सभी डुप्लिकेट पंक्तियाँ हटाएं? Android पर किसी आशय के माध्यम से किसी भी प्रकार की फ़ाइल को चुनें स्विफ्ट 3 उपयोगकर्ता ऑब्जेक्ट से कस्टम ऑब्जेक्ट को सहेजना और पुनः प्राप्त करना स्ट्रेट पैडिंग में सी ++ मैं बच निकलने वाली यूनिकोड के साथ स्ट्रिंग कैसे व्याख्या करूं? जावा सर्वलेट में POST अनुरोध से अनुरोध पेलोड प्राप्त करना मोंगोस में, मैं दिनांक को कैसे सॉर्ट कर सकता हूं? (Node.js) लॉगिन पृष्ठ पर कोणीय रीडायरेक्ट SIGSEGV को पकड़ने के लिए सिग्नल हेन्डलर कैसे लिख सकता है? जीडीबी के साथ मानक कंटेनर (एसटीडी :: नक्शा) का निरीक्षण करना निर्भर विधि प्रकारों के लिए कुछ सम्मोहक उपयोग के मामले क्या हैं?

PHP में ++ $ i और $ i ++ के बीच क्या अंतर है?

PHP में ++$i और $i++ बीच अंतर क्या है?

वेब के समाधान से एकत्रित समाधान "PHP में ++ $ i और $ i ++ के बीच क्या अंतर है?"

++$i पूर्व-वेतनमान है, जबकि $i++ पोस्ट-वेतन वृद्धि।

  • पूर्व-वेतन वृद्धि: वेतन वृद्धि चर i पहले और फिर डी-संदर्भ
  • बाद के वेतन वृद्धि: डी-संदर्भ और फिर वेतन वृद्धि i

"इस तथ्य का लाभ उठाएं कि PHP आपको पोस्ट-इंकरिमेंट ($ i ++) और प्री-इंकरिमेंट (++ $ i) की अनुमति देता है। इसका मतलब यह है कि जब तक आप $ j = $ i ++ की तरह कुछ नहीं लिख रहे हैं पूर्व-वृद्धि लगभग 10% अधिक तेज है, जिसका मतलब है कि आपको पोस्ट-टू-प्री-इंडेरिफिकेशन पर स्विच करना चाहिए, जब आपके पास अवसर हो, विशेषकर तंग लोप्स में और खासकर यदि आप सूक्ष्म-अनुकूलन के बारे में पेंडेंट हैं! " – टक्सराज

अधिक स्पष्टीकरण के लिए, PHP में वृद्धि के बाद एक अस्थायी चर को संग्रहीत करने के रूप में दस्तावेज किया गया है जो इस 10% ओवरहेड बनाम प्री-इंराइमेंटेशन के गुण हैं।

++$i पूर्व-वृद्धि है

  1. $i बढ़ी है
  2. नया मान वापस आ गया है

$i++ पोस्ट वृद्धि है

  1. $i का मूल्य एक आंतरिक अस्थायी चर में कॉपी हुआ
  2. $i बढ़ी है
  3. $i के पुराने मूल्य की आंतरिक प्रतिलिपि वापस कर दी गई है

++$i वेतनमान $i , लेकिन $i+1 $i++ वेतन वृद्धि $i मूल्य का मूल्यांकन करता है, लेकिन $i के पुराने मूल्य का मूल्यांकन करता है।

यहां एक उदाहरण है:

 $i = 10; $a = $i++; // Now $a is 10, and $i is 11 $i = 10; $a = ++$i; // Now $a is 11, and $i is 11 

कभी-कभी $i++ का उपयोग करने के लिए एक मामूली preformance लागत है देखो, जब आप कुछ ऐसा करते हैं

 $a = $i++; 

आप वास्तव में यह कर रहे हैं:

 $temporary_variable = $i; $i=$i+1; $a=$temporary_variable; 
 ++$i //first increment $i then run line $i++ //first run line then increment $i 

इस मामले में कोई अंतर नहीं है:

 for($i = 0;$i<3;++$i)var_dump $i; /* int(0) int(1) int(2) */ for($i = 0;$i<3;$i++)var_dump $i; /* int(0) int(1) int(2) */ 

परंतु:

 for($i = 0;$i<3; $j = ++$i )var_dump($j); /* NULL int(1) int(2) */ for($i = 0;$i<3; $j = $i++ )var_dump($j); /* NULL int(0) int(1) */ 

अंतर यह है: ++$i $i वैरिएबल को बढ़ाता है और नवीनीकृत मान लौटाता है, जबकि $i++ मूल मान वापस करेगा, इसलिए इसे बढ़ाना

 $prefix = 1; $postfix = 1; echo ++$prefix; // 2 echo $postfix++; // 1 

जल्डोपोंट के बिंदु की व्याख्या करने के लिए:

 $i = 1; $x = $i++; echo $x; // prints 1 $x = ++$i; echo $x; // prints 3 

पूर्व और बाद में वृद्धि को देखने का एक और तरीका यह है कि यह 2 बयानों के संयोजन के लिए लघुकथा है

पूर्व incrementing

 // long form $y = $y + 1; $x = $y; // any statement using $y // shorthand $x = ++$y; // the same statement using $y 

पोस्ट-incrementing

 // long form $x = $y; // any statement using $y $y = $y + 1; // shorthand $x = $y++; // the same statement using $y 

पोस्ट-फिक्स वेतन वृद्धि ऑपरेटर का मुख्य उद्देश्य इस तरह प्रयोग है:

 while(*condition*) $array[$i++] = $something; 

यह एक बहुत खूबसूरत तरीका है, कैसे कुछ सरणी पुनरावृत्तियों के आसपास पाने के लिए। टूट – फूट:

  1. वेरिएबल $ कुछ $ i के साथ अनुक्रमित सरणी तत्व को असाइन किया जाएगा
  2. वैरिएबल $ i को बढ़ाया जाएगा
  3. परिवर्तन अंत में है, स्थिति जाँच की जाएगी

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

यह संभवतया एक उदाहरण द्वारा सचित्र है …

पोस्ट-वेतन वृद्धि:

 $zero = 0; $n = $zero++; //$n is zero 

पूर्व वेतन वृद्धि:

 $zero = 0; $n = ++$zero; //$n is one 

संक्षिप्त जवाब:

  • उपसर्ग मूल्य बढ़ाता है और मूल्य में वृद्धि करता है
  • पोस्टफ़िक्स मूल्य बढ़ाता है और इससे पहले कि वह बढ़ाया गया था, वह मूल्य लौटाता है
  • उपसर्ग तेज है

लंबी उत्तर: यदि आप इसके बारे में कुछ सोचते हैं, तो आप स्वयं को कैसे लागू करेंगे, आपको शायद यह पता चलेगा कि उपसर्ग तेजी से क्यों है सच कहने के लिए, प्रत्यय का उपयोग करते हुए पोस्टफ़िक्स वास्तव में (अक्सर) लागू होता है:

 const TT::operator ++ (int) // postfix { T orig(*this); ++(*this); // call prefix operator return (orig); } 

पोस्टफ़िक्स से बचें, जब तक आपके पास विशिष्ट कारण नहीं है। जटिल डेटाटाइप के लिए गति में अंतर काफी हो सकता है

मैंने वास्तव में कुछ दिन पहले इसे देखा था। ये मेरा स्रोत है

अगर मैं ++ $ i $ i ++ की तुलना में 10% अधिक तेज है, तो परीक्षण करने के लिए निम्नलिखित कोड चलाया। मैं मानता हूं, कोड का कोई स्थिर परिणाम नहीं है, लेकिन फिर भी मुझे कम से कम 10% के करीब कुछ नंबर मिलना चाहिए। मैं सबसे अधिक था 4-4.5% लगभग था

 <?php $randomFloat = rand(0, 10) / 10; $before1 = microtime(true); for($i=0; $i <1000000; ++$i){ $rand = (rand(0, 10) / 10) * (rand(0, 10) / 10); } $after1 = microtime(true); echo 'it took '.($after1-$before1) . ' seconds fot ++$i<br />'; $before2 = microtime(true); for($i=0; $i <1000000; $i++){ $rand = (rand(0, 10) / 10) * (rand(0, 10) / 10); } $after2 = microtime(true); echo 'it took '.($after2-$before2) . ' seconds fot $i++<br /><br />'; echo '++$i is '.((($after1-$before1)*100)/($after2-$before2)-100).'% faster than $i++'; 

यह उदाहरण केवल एलेप्लेन

 <?php $x = 10; echo $x++. ' '.$x; // the result is 10 and 11 echo "<br>"; $y = 10; echo ++$y. ' ' .$y; // the result is 11 and 11 // so the $x++ is not showing +1 at first but the next time // and the ++y is showing +1 first time but not increasing next ?>