2012-02-09 10 views
6

यहाँ सरल PHP कोड, (कॉमा) और के बीच क्या अंतर है। (डॉट) एक concatenation ऑपरेटर के रूप में?

echo '<form method="POST" action="calcbyme.php"></br> 
    enter value1 :<input type="text" name="f1"></br> 
    give operator :<input type="text" name="op"></br> 
    enter value2 :<input type="text" name="f2"></br> 
    <input type="submit" value="calculate"></br>'; 
    if(isset($_POST["f1"]) && isset($_POST["f2"]) && isset($_POST["op"])){ 
     $a=$_POST["f1"]; 
     $b=$_POST["f2"]; 
     $op=$_POST["op"]; 
     switch ($op){ 
      case '+': 
       echo "$a+$b=". $a+$b; break; 
      case '-': 
       echo "$a-$b=". $a-$b; break; 
      case '*': 
       echo "$a*$b=". $a*$b; break; 
      case '/'; 
       echo "$a/$b=". $a/$b; break; 
      default: 
       echo "invalid operator"; break; 
     } 
    } 

अगर मैं $a=4 और $b=2 मान, लेकिन यह इस

6 
2 
8 
2 

अगर मैं शब्दों में कहें, (अल्पविराम) की तरह ही मूल्य देने के बजाय है। (डॉट) तो यह

4+2=6 
4-2=2 
4*2=8 
4/2=2 

ऐसा सही क्यों होता है?

+0

जिज्ञासा की बस, गणित परिचालन को '()', उदाहरण के लिए संलग्न करने का प्रयास करें। '($ ए + $ बी)' – Vyktor

+0

क्या आप पहले से ही निर्मित गणित ऑपरेटरों को पुनर्निर्मित नहीं कर रहे हैं? – summea

+3

ध्यान दें कि 'echo' + ',' स्ट्रिंग concatenation नहीं है और थोड़ा तेज है (क्योंकि यह उस ओवरहेड से बचाता है)। 'echo $ a, $ b' 'echo $ a की तरह है; echo $ b'। लेकिन अपने प्रश्न के बारे में, उन उत्तरों को देखें जो ऑपरेटर प्राथमिकता के बारे में बात करते हैं। – Matthew

उत्तर

3

यह php operator precedence के साथ क्या करना है ...

अभिव्यक्ति युक्त . भाव + युक्त से पहले मार डाला जाता है, तो इसके अंतर्निहित कोष्ठक हैं:

.+- बराबर ऑपरेटर हैं (वहाँ कोई पूर्वता उन पर लागू किया है) और उन्हें अनुक्रमिक रूप से प्रारंभ से अंत तक निष्पादित किया जाता है, इसके लिए निहित ब्रैकेट होते हैं:

echo ("$a+$b=". $a)+$b 

तो अगर आप सही उत्पादन चाहते हैं आप का उपयोग करना चाहिए:

echo "$a+$b=". ($a+$b) 

अनुभवसिद्ध उदाहरण:

php > echo "foo" . 1 + 2; 
// 2 
php > echo "foo" . (1 + 2); 
// foo3 
php > echo 1 + 3 . 'foo'; 
// 4foo 

और क्यों है , काम कर रहे ... कोमा समारोह तर्क अलग करती है और php के रूप में समझती क्योंकि:

echo("$a+$b=", $a+$b); 

और कोमा ऑपरेटर (,) का मूल्यांकन अंतिम के रूप में किया जाता है।

+0

'echo'' पर एक फ़ंक्शन है, लेकिन एक भाषा निर्माण है, इस प्रकार '" $ + $ b = "' और '$ a + $ b' _not_ फ़ंक्शन तर्क हैं । कारण, यह वैसे भी क्यों काम करता है, यह है कि, 'echo' के साथ _special_ अर्थ है (इसका मूल्यांकन' echo "$ + $ b =" के रूप में किया गया है, $ e + $ b echo; ')। – KingCrunch

+0

लेक्सर को अल्पविराम से अलग ईको के साथ कम ओवरहेड है। तो यह माइक्रो ऑप्टिमाइज़ेशन –

+0

की तरह दिलचस्प है कि किसी ने समझाया कि क्यों पहला मामला वास्तव में सही परिणाम लौटाता है ... क्योंकि यह मूल रूप से मौका है। संख्या ऑपरेटर के लिए PHP स्वचालित रूप से एक स्ट्रिंग को एक संख्या में परिवर्तित करता है जैसे कि यह स्ट्रिंग को तब तक पढ़ता है जब तक कि यह पहला गैर-संख्या वर्ण नहीं पाता और फिर इसे परिवर्तित करता है। यह व्यवहार मैं काफी अद्वितीय मानता हूं ... – dualed

0

अंतर यह है कि , एक संयोजन ऑपरेटर नहीं है, लेकिन शुरुआत

echo "$a+$b=". $a+$b; 
$a=2 और $b=4 साथ

से शुरू की सुविधा देता है, जैसे

echo ("4+2=". 4)+2; 
echo "4+2=4"+2; 
echo ((int) "4+2=4")+2; 
echo 4+2; 
echo 6 

बिंदु है मूल्यांकन किया जाता है कि अल्पविराम , समेकित नहीं है, लेकिन यह अभिव्यक्ति सूचीबद्ध करता है (कम से कम echo के लिए। manual बस "कई उपयोग" ...) कहता है, इस प्रकार प्रत्येक अभिव्यक्ति निष्पादित की जाती है o एन स्वयं का।

echo "$a+$b=", $a+$b; 
echo "$a+$b="; echo $a+$b; 
echo "2+4=";echo 2+4; 
संबंधित मुद्दे