PHP

2011-06-13 7 views
17

में एक स्ट्रिंग में कक्षा निरंतर the manual का मेरा पठन ("स्ट्रिंग एक्सेस और चरित्र द्वारा संशोधन" शीर्षक से पहले थोड़ा सा यह है कि आप क्लास स्थिरांक के साथ कुछ फैंसी चालें और {} स्ट्रिंग के अंदर कर सकते हैं लेकिन आप यह आसान काम नहीं कर सकता है जो इस विधि को सत्य वापस कर देगा:PHP

class c { 
    const k = '12'; 
    public function s() { 
     return "Twelve in decimal is {c::k}."; 
    } 
} 

क्या सही समाधान यहां सम्मिलित है?

+0

संगतता कार्य करता है, क्यों _wouldn't_ आप बस संयोजित नहीं हैं? – tplaner

+7

@evolve: प्रश्न PHP भाषा के बारे में है, न कि अच्छे कोड का गठन करने के बारे में। मैं बिंदु के बगल में क्यों (या अगर विकल्प था) को जोड़ना या नहीं करना चाहूंगा। –

+0

यदि कोई सोच रहा है कि आप क्यों सम्मिलित नहीं करना चाहते हैं; आप डबल उद्धृत तारों की बजाय _heredoc_ तारों का उपयोग कर रहे हैं। दोनों चर का विस्तार करते हैं, लेकिन हेडॉर्ड्स वास्तव में concatenation के साथ अच्छी तरह से खेल नहीं है। –

उत्तर

9

क्या सही समाधान यहां सम्मिलित करने के लिए है?

हां। विस्तारित घुंघराले वाक्यविन्यास इसका समर्थन नहीं करता है।

वैकल्पिक रूप से, आप एक सरणी में स्थिरांक की सूची निर्यात कर सकते हैं और इसका उपयोग कर सकते हैं (या एक एकल स्केलर चर नाम पर स्थिर निर्यात), लेकिन यह वास्तव में एक अच्छा समाधान आईएमओ नहीं है।

ध्यान दें कि स्थिरांक उपलब्ध हैं, के रूप में आप यह कर सकते हैं:

const k = 'foo'; 
$foo = 'bar'; 
echo "{${c::k}}" 

आप bar दे रही है, लेकिन यह है कि आप क्या चाहते हैं नहीं है।

7

यह थोड़ा सा रहस्यमय है, लेकिन मैन्युअल में इस पर एक नोट है।

कार्य, विधि कॉल, स्थैतिक कक्षा चर, और वर्ग स्थिरांक अंदर {$} काम पीएचपी 5. के बाद से हालांकि, पहुँचा दायरे में एक चर के नाम के रूप में व्याख्या की जाएगी मूल्य जिसमें स्ट्रिंग परिभाषित किया गया है । एकल घुंघराले ब्रेसिज़ ({}) का उपयोग करना कार्यों या विधियों के वापसी मूल्यों या कक्षा स्थिरांक या स्थैतिक वर्ग चर के मानों तक पहुंचने के लिए काम नहीं करेगा।

अंतिम वाक्य आपको बताता है कि यह काम नहीं करेगा तो हाँ, संयोजन यहाँ जाने का रास्ता है।


(संशोधित) उपरोक्त अनुच्छेद का उदाहरण:

<?php 
class beers { 
    const softdrink = 'rootbeer'; 
} 

$rootbeer = 'A & W'; 

// This works; outputs: I'd like an A & W 
echo "I'd like an {${beers::softdrink}}\n"; 

// This won't work; outputs: I'd like an {beers::softdrink} 
echo "I'd like an {beers::softdrink}\n"; 
+0

यह ठीक मैनुअल का हिस्सा है जिसे मैंने ओपी में संदर्भित किया और मुझे थोड़ा उलझन में मिला। लेकिन मुझे लगता है कि हम इसका क्या अर्थ है इस पर सहमत हैं। –

5

घुंघराले वाक्य रचना केवल 'चर अभिव्यक्ति' के लिए काम करता है। और आपको {$ के साथ एक्सेस करने की आवश्यकता है।

$c = "constant"; 
    return "Twelve in decimal is {$c('c::k')}."; 

स्पष्ट रूप से ज्यादा नहीं कम या सिर्फ यहाँ स्ट्रिंग संयोजन का उपयोग कर अधिक से अधिक पठनीय है कौन सा:

ओह, वहाँ केवल कि वैकल्पिक हल है।

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