2010-05-30 7 views
14

यह प्रिंट सेब:उद्धरण के अंदर स्थिरांक मुद्रित नहीं हैं?

define("CONSTANT","apple"); 
echo CONSTANT; 

लेकिन यह नहीं करता है:

echo "This is a constant: CONSTANT"; 

क्यों?

+0

मुझे समझ में नहीं आता है। दूसरे मामले के लिए आपका अपेक्षित आउटपुट क्या है? 'यह एक सेब है: ए'? –

+0

मेरा बुरा। फिक्स्ड .. – Yeti

+4

इस बारे में सोचें कि डबल-उद्धृत तारों को पार्स करना कितना काम होगा यदि पार्सर को यह जांचना पड़ता था कि कोई सबस्ट्रिंग परिभाषित स्थिरता से मेल खाता है या नहीं और यह धीमा हो जाएगा क्योंकि आप अधिक स्थिरांक परिभाषित करते हैं। और, आपको निरंतर परिभाषित करने के बाद अपने सभी तारों के अंदर राजधानी अक्षर ए से बचना होगा! – grossvogel

उत्तर

22

क्योंकि "कोट्स के अंदर स्थिरांक मुद्रित नहीं होते हैं"। सही रूप है:

echo "This is a constant: " . CONSTANT; 

डॉट कॉन्सटेनेशन ऑपरेटर है।

+13

जैसे ही '{{var}" '' है, मुझे स्ट्रिंग इंटरपोलेशन वाक्यविन्यास से मेल खाने के लिए "{CONSTANT}" 'की उम्मीद है। –

5

यदि आप तारों के अंदर चर के संदर्भों को संदर्भित करना चाहते हैं तो आपको विशेष वाक्यविन्यास का उपयोग करने की आवश्यकता है। इस सुविधा को स्ट्रिंग इंटरपोलेशन कहा जाता है और अधिकांश स्क्रिप्टिंग भाषाओं में शामिल किया जाता है।

This page PHP में सुविधा का वर्णन करता है। ऐसा प्रतीत होता है कि स्थिरांक को PHP में स्ट्रिंग इंटरपोलेशन के दौरान प्रतिस्थापित नहीं किया जाता है, इसलिए आपके इच्छित व्यवहार को प्राप्त करने का एकमात्र तरीका आर्टेफैक्टो ने समेकन का उपयोग करना है।

वास्तव में, मैं सिर्फ another post के रूप में ज्यादा कह पाया:

AFAIK, स्थैतिक चर के साथ, एक ही स्थिरांक के साथ के रूप में 'समस्या' है: कोई प्रक्षेप संभव, बस अस्थायी चर का उपयोग या संयोजन।

+2

कारण है कि आप विशेष वाक्यविन्यास '{}' का उपयोग स्थिरांक के साथ क्यों नहीं कर सकते हैं: ब्रैकेट को केवल "विशेष वाक्यविन्यास" के रूप में पहचाना जाता है यदि '{' तुरंत '' '' के बाद होता है। लेकिन स्थिरांक में यह नहीं है ... –

+0

'$' आमतौर पर एक सिगिल कहा जाता है। मैंने कोई कठोर और तेज़ प्रलेखन नहीं देखा है जो कहता है कि स्ट्रिंग इंटरपोलेशंस केवल '$ 'के साथ चर और अभिव्यक्तियों पर काम करता है, लेकिन PHP I में स्ट्रिंग इंटरपोलेशन के प्रत्येक उदाहरण का उपयोग इसे मिल सकता है। grossvogel की postulation शायद यह एक बहुत ही उचित कारण है कि ऐसा है। – jasonmp85

+1

ओपी एक ही परिणाम उत्पन्न करने के लिए एक सरल तरीका के रूप में [sprintf] (http://php.net/manual/en/function.sprintf.php) का भी उपयोग कर सकता है। 'sprintf ('यह एक स्थिर है:% s', CONSTANT);' – kojiro

16
define('QUICK', 'slow'); 
define('FOX', 'fox'); 

$K = 'strval'; 

echo "The {$K(QUICK)} brown {$K(FOX)} jumps over the lazy dog's {$K(BACK)}."; 
+5

यदि यह स्पष्ट नहीं है, तो अप्रत्यक्ष फ़ंक्शन कॉल तकनीक के साथ बड़ी समस्या यह है कि $ K वैश्विक नामस्थान में नहीं है, इसलिए इसे घोषित किया जाना चाहिए 'वैश्विक $ K;' प्रत्येक फ़ंक्शन में जिसका उपयोग करने की आवश्यकता है। – gregjor

0

कड़ी यहाँ केवल समाधान के रूप में सुझाव दिया गया है, लेकिन यह है कि जब की तरह सिंटेक्स के उपयोग से काम नहीं करता:

define("MY_CONSTANT", "some information"); 
    $html = <<< EOS 
    <p>Some html, **put MY_CONSTANT here**</p> 
EOS; 
बेशक

, ऊपर सिर्फ पाठ 'MY_CONSTANT' कहते हैं $ एचटीएमएल।

अन्य विकल्पों में शामिल हैं:

  • धारण करने के लिए एक अस्थायी चर को परिभाषित निरंतर:

    $myConst = MY_CONSTANT; 
        $html = <<< EOS 
        <p>Some html, {$myConst} </p> 
    EOS; 
    
  • अगर वहाँ कई स्थिरांक हैं, आप उन सभी की एक सरणी हो और कि उपयोग कर सकते हैं:

    $constants = get_defined_constants(); 
        $html = <<< EOS 
        <p>Some html, {$constants["MY_CONSTANT"]} </p> 
    EOS; 
    

बेशक, इस तरह के एक छोटे से छोटे उदाहरण में, < < < ऑपरेटर का उपयोग करने का कोई कारण नहीं है, लेकिन आउटपुट के लंबे ब्लॉक के साथ उपरोक्त दो स्ट्रिंग concatenation के गुच्छा से बनाए रखने के लिए बहुत स्पष्ट और आसान हो सकता है!

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