2012-04-06 17 views
24
<?php 
    define('my_const', 100); 
    echo <<<MYECHO 
     <p>The value of my_const is {my_const}.</p> 
MYECHO; 
?> 

यदि मैं ब्रेसिज़ के अंदर एक चर डालता हूं तो यह प्रिंट करता है। लेकिन निरंतर नहीं। मैं यह कैसे कर सकता हूं? धन्यवाद!हेरडोक में स्थिर (स्थिर नहीं) इंटरपोलेट करें?

+0

के संभावित डुप्लिकेट [परिभाषित करने और हियरडॉक] (http://stackoverflow.com/questions/8242922/define-and: यह तथ्य यह है कि एक समारोह का नाम एक चर को सौंपा जा सकता है और फिर कहा जाता हियरडॉक भीतर का उपयोग करता है -heredoc) – dsnunez

उत्तर

26

उपयोग sprintf()

define('my_const', 100); 
$string = <<< heredoc 
     <p>The value of my_const is %s.</p> 
heredoc; 

$string = sprintf($string, my_const); 
+0

मुझे एक ही समस्या थी, और यह मेरा एकमात्र तरीका था। विधियों – haltabush

+1

@ हल्टबश के लिए यह वही समस्या है, आप फ़ंक्शन का भी उसी तरह उपयोग कर सकते हैं। – Starx

39

मुझे पता है कि यह पहले से ही उत्तर दिया गया है हूँ, लेकिन आप भी एक चर के लिए निरंतर का मूल्य बताए द्वारा समस्या से संपर्क कर सकता।

व्यक्तिगत रूप से मैं इसे इस तरह से करता हूं क्योंकि यदि आपके स्ट्रिंग में बहुत सारे स्थिरांक हैं तो आपका स्पिंटफ़ कॉल काफी गन्दा हो सकता है। स्ट्रिंग के माध्यम से स्कैन करना और यह देखना भी मुश्किल है कि क्या कर रहा है। इसके अलावा, अलग-अलग चर को असाइन करके, आप देख सकते हैं कि क्या मूल्य ले रहा है।

एक उदाहरण होगा:

$const = CONST; 
$variable = VARIABLE; 
$foo = (new Foo)->setFooProperty(12)->getFooProperty(); 
$bar = (123 - 456) * 10; 
$ten = 1 + 2 + 1 + (5 - 4); 
<<<EOD 
Lorem ipsum dolor sit amet, **$variable** adipiscing elit. 
Duis gravida aliquet dolor quis gravida. 
Nullam viverra urna a velit laoreet, et ultrices purus condimentum. 
Ut risus tortor, facilisis sed porta eget, semper a augue. 
Sed adipiscing erat non sapien commodo volutpat. 
Vestibulum nec lectus sed elit dictum accumsan vel adipiscing libero. 
**$const** vehicula molestie sapien. 
Ut fermentum quis risus ut pellentesque. 
Proin in dignissim erat, eget molestie lorem. Mauris pretium aliquam eleifend. 
**$foo** vitae sagittis dolor, quis sollicitudin leo. 
Etiam congue odio sit amet sodales aliquet. 
Etiam elementum auctor tellus, quis pharetra leo congue at. Maecenas sit amet ultricies neque. 
Nulla luctus enim libero, eget elementum tellus suscipit eu. 
Suspendisse tincidunt arcu at arcu molestie, a consequat velit elementum. 
Ut et libero purus. Sed et magna vel elit luctus rhoncus. 
Praesent dapibus consectetur tortor, vel **$bar** mauris ultrices id. 
Mauris pulvinar nulla vitae ligula iaculis ornare. 
Praesent posuere scelerisque ligula, id tincidunt metus sodales congue. 
Curabitur lectus urna, porta sed molestie ut, mollis vitae libero. 
Vivamus vulputate congue **$ten**. 
EOD; 
+0

यदि मैं वैरिएबल में मान रखने जा रहा हूं तो पहली जगह में स्थिर स्थिरांक को परेशान क्यों किया जाए? – FatalError

-3

सरल चर और उपयोग में अपने निर्धारित चर रखो बस निम्न उदाहरण में हियरडॉक में शामिल:

<?php 
define('my_const', 100); 
$variable = my_const; 
    echo <<<MYECHO 
     <p>The value of my_const is {$variable}.</p> 
MYECHO; 
?> 
+5

यह @ लुके के उत्तर जैसा ही है और – chiliNUT

+2

कुछ भी नहीं जोड़ता है यह @ लुके के जवाब से बहुत अधिक संक्षिप्त है। मुझे लगता है कि यह ब्रेवटी का लाभ जोड़ता है। –

4

तुम भी get_defined_constants फ़ंक्शन का उपयोग कर सकते हैं। यह एक सरणी, जो आप अपने हियरडॉक स्ट्रिंग में उपयोग कर सकते हैं

// Let's say there is FOO and BAR defined 
$const = get_defined_constants(); 

$meta = <<< EOF 
    my awesome string with "{$const['FOO']}" and "{$const['BAR']}" constants 
EOF; 
+5

यह आमतौर पर इतना अच्छा विचार नहीं है, क्योंकि सूची काफी बड़ी होगी, क्योंकि इसमें भाषा कोर और एक्सटेंशन से सभी स्थिरांक शामिल हैं जो आप वास्तव में चाहते हैं। उन्हें स्थानीय चर के लिए मैन्युअल रूप से असाइन करना क्लीनर लगता है। – FGM

9

यहाँ डबल-कोटेड तार और heredocs स्थिरांक सहित घुंघराले ब्रेसिज़ वाक्य रचना, में मनमाने ढंग से भाव को रोकने के लिए अनुमति देने के लिए एक छोटी सी चाल है में सभी वर्तमान में परिभाषित स्थिरांक वापस डालता है और अन्य समारोह कॉल।

<?php 

// Declare a simple function 
function _placeholder($val) { return $val; } 
// and assign it to something short and sweet 
$_ = '_placeholder'; 

// or optionally for php version >= 5.3 
// Use a closure (anomynous function) like so: 
$_ = function ($val){return $val;}; 

// Our test values 
define('abc', 'def'); 
define('ghi', 3); 

$a=1; 
$b=2; 

function add($a, $b) { return $a+$b; } 

// Usage 
echo "b4 {$_(1+2)} after\n"; // outputs 'b4 3 after' 
echo "b4 {$_(abc)} after\n"; // outputs 'b4 def after' 
echo "b4 {$_(add($a, $b)+ghi*2)} after\n"; // outputs 'b4 9 after' 
$text = <<<MYEND 

Now the same in heredoc: 
b4 {$_(1+2)} after 
b4 {$_(abc)} after 
b4 {$_(add($a, $b)+ghi*2)} after 

MYEND; 
echo $text; 
+1

यह एक महान चाल है। स्थैतिक वर्ग गुणों को सम्मिलित करने के लिए भी अच्छी तरह से काम करता है। – hackel

+0

एक जावास्क्रिप्ट स्क्रिप्ट युक्त हेरेडोक में गणना मानों को पारित करने के लिए बहुत अच्छा काम किया। पहले कुछ परेशानी थी क्योंकि मैं जिस स्ट्रिंग को पार कर रहा था उसके चारों ओर उद्धरण देना भूल गया था - दुह –

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