2012-07-19 17 views
6

क्या यह व्यवहार PHP में सही है?PHP प्रकार कास्टिंग प्राथमिकता

<?php echo '-' . 1 + 1 . ' crazy cats'; ?> 
// Outputs: 
0 crazy cats 

मैं समझता हूँ कि शून्य से पहले '1' और '-1' पूर्णांक casted को श्रेणीबद्ध किया जा रहा है, और नहीं '2' स्ट्रिंग के लिए।

कृपया बताएं क्यों।

इसे हल करने का सबसे अच्छा तरीका क्या है? यह एक? सब से

<?php echo '-' . (string)1 + 1 . ' crazy cats'; ?> 
+0

चकित यह एक शिकार नहीं है .. इसलिए +1 – Louis

उत्तर

1

आप चाहें, तो इस पूर्वता से बचा जाता है:

printf('-%d crazy cats',1+1); 
6

सबसे पहले, यह सही है, और अगर यह अलग होगा यह भी सही होगा, कि कैसे PHP डेवलपर परिभाषित संकार्य पूर्वता है।
इस परिदृश्य में, कोई संकार्य, पूर्वता है तो यू पढ़ यह सही करने के लिए

  1. '-' . 1 ==> '-1'
  2. '-1' + 1 ==> 0 छोड़ दिया (तारों पर अंकगणितीय आपरेशनों, उन्हें संख्या के पहले और उसके बाद कास्ट करने के लिए कोशिश करेंगे arithmetics करते हैं)।
  3. 0 . ' crazy cats' ==> "0 crazy cats" (संख्याओं पर तार संचालन, उन्हें तारों में डालेगा)।
+2

अरे, आप तेजी से थे की तुलना में मेरे BTW :), ऑपरेटर पूर्वता http://checkout.google.com/support/sell/bin/request.py?contact_type=appeal&ctx=scf पर उपलब्ध है: // php.net/manual/en/language.operators.precedence.php। –

1

आपकी verbiage बंद है। '-' कास्ट नहीं किया जा रहा है लेकिन सम्मिलित है।

PHP अभी भी एक पूर्णांक के रूप में (string) 1 और -1 का इलाज करेगा।

. और +/- PHP में समान प्राथमिकता है, इसलिए स्ट्रिंग को बाएं से दाएं से पढ़ा जा सकता है।

echo '-1' + '1 crazy cats'; 
+0

माइनस निश्चित रूप से नहीं डाला गया है, सवाल को सही किया गया है। – Paker

4

यदि आप चाहते हैं -2 पागल बिल्लियों, आप पूर्वता हेरफेर कोष्ठक के साथ सेट कर सकते हैं:

ऊपर कह के समान है

echo '-' . (1 + 1) . ' crazy cats'; 
3

echo भी echo 'foo', 'bar' का निर्माण इस प्रकार है जो वस्तुओं को गूंजने के लिए अलग-अलग कथन में अलग करता है। आपको उस मामले में कॉन्सटेनेशन ऑर्डर के बारे में चिंता करने की ज़रूरत नहीं है।

तो आप <?php echo '-', (1 + 1), ' crazy cats'; ?> कर सकते हैं और आपकी बिल्लियों को नकारात्मकों की परवाह नहीं होगी!