2011-03-14 6 views
5

printf("by %1$s on %2$s", 'string1', 'string2'); काम नहीं करता है, जबकि printf('by %1$s on %2$s', 'string1', 'string2'); करता है।PHP में printf() क्यों काम नहीं कर रहा है जब मैं डबल उद्धरण चिह्नों का उपयोग करता हूं?

मैं वास्तव में एक वर्डप्रेस थीम डिजाइन कर रहा हूं, और मूल बीस थीम का बहुत करीब से पालन कर रहा हूं। अजीब बात यह है कि, मैं अपने सभी पिछले printf() कथनों पर बिना किसी समस्या के डबल कोटेशन अंक का उपयोग कर रहा हूं।

उत्तर

11

जब आप दोहरे उद्धरण चिह्नों का उपयोग कर रहे $s में के रूप में एक चर

के रूप में व्यवहार किया जाता है क्योंकि: का उपयोग करते समय

$x = "World"; 
echo "Hello $x"; // Will print: "Hello World 

जहां के रूप में:

$x = "World"; 
echo 'Hello $x'; // Will just print "Hello $x" 

, इसकी विस्तृत व्याख्या आप के लिए मैनुअल की जांच कर सकते हैं:

Strings in General

Single quoted बनाम Double quoted

+0

धन्यवाद! मैंने% 1 \ $ s का उपयोग किया और यह काम किया। : डी –

+0

@fterh आपको इस उत्तर को सही के रूप में चिह्नित करना चाहिए यदि यह आपकी मदद करता है (इसके बाईं ओर बड़ा हरा तीर)। – JohnP

2

क्योंकि आप '$ s' के अपने स्ट्रिंग में थोड़ा है यही कारण है कि। डबल कोटेशन अंक का उपयोग करते समय PHP इसे एक चर के रूप में व्याख्या करता है और इसे पार्स करने का प्रयास करता है। आपने शायद पहले $ के बिना डबल कोटेशन का उपयोग किया था।

3

यह जानना बहुत महत्वपूर्ण है कि PHP एक उद्धृत और डबल उद्धृत तारों का अलग-अलग व्यवहार कर रहा है।

आप आधिकारिक php docs में और अधिक पढ़ सकते हैं, लेकिन मैं आपको एक विशेषता दे:

$t = 'bla'; 
echo '$t'; 

इच्छा उत्पादन $ टी, जहां

$t = 'bla'; 
echo "$t"; 

इच्छा उत्पादन bla

1

अन्य के रूप में उत्तर कहते हैं, यह एक चर के रूप में $s का इलाज करता है, आप हमेशा $

से बच सकते हैं
printf("by %1\$s on %2\$s", 'string1', 'string2'); 

हालांकि मैं एकल उद्धरण चिह्नों का उपयोग करता हूं, क्योंकि php को स्ट्रिंग को पार्स करने की आवश्यकता नहीं होती है और इसलिए तेज़ी से होती है।

+0

PHP एकल उद्धरण चिह्नों के साथ भी स्ट्रिंग को पार्स करेगा क्योंकि (1) इसे स्ट्रिंग के अंत तक स्कैन करने की आवश्यकता है और (2) यह भागने अनुक्रम '\' 'की तलाश में है जो स्ट्रिंग को समाप्त नहीं करता है। नतीजतन, गति अंतर शून्य के करीब है (कार्यान्वयन में मॉड्यूलो संभावित बग, प्राचीन PHP संस्करणों के साथ इससे कोई फर्क पड़ता है)। –

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