2010-09-12 24 views
41

मैं उद्धरण आदि से बचने की परेशानी के बिना HTML सामग्री को प्रारूपित करने के लिए PHP की EOF स्ट्रिंग का उपयोग करता हूं। मैं इस स्ट्रिंग के अंदर फ़ंक्शन का उपयोग कैसे कर सकता हूं?PHP के अंदर गेटटेक्स्ट का उपयोग करके PHP <<< ईओएफ स्ट्रिंग

<?php 
    $str = <<<EOF 
    <p>Hello</p> 
    <p><?= _("World"); ?></p> 
EOF; 
    echo $str; 
?> 

उत्तर

72

जहां तक ​​मेरा the manual में देख सकते हैं, यह संभव नहीं हियरडॉक तार अंदर कार्यों कॉल करने के लिए है। एक बोझिल रास्ता शब्द पहले से तैयार करने के लिए किया जाएगा:

<?php 

    $world = _("World"); 

    $str = <<<EOF 
    <p>Hello</p> 
    <p>$world</p> 
EOF; 
    echo $str; 
?> 

एक समाधान यह विचार है कि मन एक magic getter method के साथ एक वर्ग बनाने जा रहा है की बात आती है।

आप इस प्रकार का वर्ग घोषणा करेंगे:

class Translator 
{ 
public function __get($name) { 
    return _($name); // Does the gettext lookup 
    } 
} 

कुछ बिंदु पर वर्ग की एक वस्तु प्रारंभ:

$translate = new Translator(); 

फिर आप निम्न सिंटैक्स का उपयोग कर सकते हैं एक के अंदर एक gettext देखने करने के लिए हेरडोक ब्लॉक:

$str = <<<EOF 
    <p>Hello</p> 
    <p>{$translate->World}</p> 
EOF; 
    echo $str; 
?> 

$translate->World स्वचालित रूप से ट्रैक्टर होगा जादू गेटटर विधि के लिए gettext लुकअप धन्यवाद के लिए nslated।

रिक्ति या विशेष वर्ण के साथ शब्दों के लिए इस विधि का उपयोग करने के लिए (उदाहरण के लिए एक gettext Hello World!!!!!! नामित प्रविष्टि, तो आपको निम्न संकेतन का उपयोग करना होगा:।

$translate->{"Hello World!!!!!!"} 

यह सब अपरीक्षित है, लेकिन काम करना चाहिए

अद्यतन: जैसा कि @ मारियो पता चला है, हेरडोक तारों से कार्यों को कॉल करना संभव है। मुझे लगता है कि इस तरह के गेटर्स का उपयोग करना एक चिकना समाधान है, लेकिन प्रत्यक्ष फ़ंक्शन कॉल का उपयोग करना आसान हो सकता है। कैसे यह करो।

+1

@FFish आपका स्वागत है। यह अवांछित है इसलिए मैं आपको कुल गारंटी नहीं दे सकता लेकिन जहां तक ​​मैं देख सकता हूं, यह काम करेगा। अधिक जटिल गेटटेक्स्ट पहचानकर्ताओं –

+0

वाह, गेटर्स के बहुत मुश्किल/योजनाबद्ध उपयोग से निपटने के तरीके के लिए मेरा नवीनतम अपडेट (रिक्त स्थान और विशेष वर्णों के बारे में) देखें। – mario

+7

बाहर निकलता है आप फ़ंक्शन कॉल का उपयोग कर सकते हैं। '$ _ =" _ ";' और '{$ _ ('text')}' 'के साथ। लेकिन गेटर सिंटैक्स +1 है। – mario

0

जहां तक ​​मैं देख सकता हूँ, तुम बस हियरडॉक गलती
यहाँ बदसूरत हियरडॉक वाक्य-विन्यास का उपयोग करने की आवश्यकता नहीं है से जोड़ा।
बस इसे हटा दें और सब कुछ काम करेंगे:

<p>Hello</p> 
<p><?= _("World"); ?></p> 
+3

मुझे नहीं लगता कि "हैलो वर्ल्ड" ओपी के वास्तविक उत्पादन कोड से एक अंश है। –

+0

@ पेक्का इससे कोई फर्क नहीं पड़ता। हेरेडोक अभी भी बेकार है –

+3

आकार के मामले में, ऐसी कई स्थितियां हैं जहां हेरेडोक का उपयोग करना किसी प्रकार के टेम्पलेट इंजन का उपयोग करने का एक अच्छा विकल्प है।मेरी राय में इसका एकमात्र बड़ा नकारात्मक पक्ष यह है कि अंत मार्कर को इंडेंट नहीं किया जा सकता है, जो इंडेंट कोड कोड –

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