2009-07-18 8 views
76

एसओ पर पहला प्रश्न और यह एक वास्तविक आरटीएम उम्मीदवार है। लेकिन मैं आपको वादा करता हूं कि मैंने देखा है और इसे ढूंढ नहीं सकता है। मैं खुशी से एक #headpalm करूँगा जब यह एक साधारण चीज है जो मुझे याद आया।PHP घुंघराले ब्रेस वाक्यविन्यास

Zend फ्रेमवर्क यह पता लगाने की कोशिश कर रहा है और निम्न सिंटैक्स में आए:

$this->_session->{'user_id'} 

मैं क्या एक सदस्य चर प्रतीत होता है पहुँचने के लिए उपयोग घुंघराले ब्रेसिज़ वाक्य रचना कभी नहीं देखा है। यह कैसे

की तुलना में अलग
$this->_session->user_id 

मैं यह सोचते हैं रहा है कि _SESSION अप्रासंगिक है, लेकिन सवाल में यह भी शामिल है के बाद से यह नहीं हो सकता है।

क्या घुंघराले ब्रेसिज़ केवल एक स्वच्छता सम्मेलन है जो यौगिक परिवर्तनीय नाम user_id को लपेटने का प्रयास करता है? या यह किसी विशेष एक्सेसर का है?

टीएफएम में कोई भी पॉइंटर्स ताकि मैं आर अप कर सकूं, नम्रतापूर्वक सराहना की जाएगी।

बहुत धन्यवाद। कृपया सभ्य रहिये।

+7

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

+1

दिलचस्प बोली: आप घुंघराले वाक्यविन्यास के साथ विधियों को कॉल कर सकते हैं, और परिणाम सीधे विधि को कॉल करने के रूप में तेज़ है। Call_user_func का उपयोग करना अधिक सामान्य है, लेकिन $ obj -> {$ method} ("parm1," parm2 "के बजाय call_user_func (सरणी ($ obj, $ method)," parm1 "," parm2 ") करने में दो बार लगते हैं।); – Rolf

+0

और बाद वाला भी अधिक पठनीय है। कम से कम आईएमओ। दरअसल, मैं अक्सर उस मामले में विधि नाम पर घुंघराले ब्रेसिज़ को छोड़ देता हूं: '$ obj -> $ method ($ params)' –

उत्तर

46

घुंघराले ब्रेसिज़ का उपयोग एक चर नाम के स्पष्ट रूप से निर्दिष्ट करने के लिए किया जाता है। उदाहरण के लिए:

echo "This square is {$square->width}00 centimeters broad."; 

तो, आपका मामला वास्तव में दो विशेष मामलों का संयोजन है। आप और वर्ग घुंघराले ब्रेसिज़ का उपयोग कर चर का उपयोग करने की अनुमति हो तो जैसे:

$class->{'variable_name'} // Same as $class->variable_name 
$class->{'variable' . '_name'} // Dynamic values are also allowed 

और अपने मामले में, तुम बस घुंघराले ब्रेस वाक्य रचना के साथ उन्हें आसपास रहे हैं।

PHP manual, "जटिल (घुंघराले) वाक्यविन्यास देखें।"

+2

यह नहीं है जिस स्थिति में यह $ -> _ सत्र -> {'user_id'} का उपयोग किया जा रहा है। – jimyi

+0

त्वरित उत्तर के लिए धन्यवाद। हाँ, मैं सिरदर्द ले जाऊंगा। मैंने अन्य परिस्थितियों में वाक्यविन्यास का उपयोग किया है, बस पहचान नहीं लिया यह सदस्य चर के संदर्भ में है। इससे भी बदतर, मेरी खोज में मैं मैन्युअल में उस पृष्ठ पर था, लेकिन सदस्य चरम नमूना नहीं देखा। Sigh ... फिर भी, मैंने जो उदाहरण दिया वह एक विषम तरह का था जिस मामले में इसका उपयोग करना है, है ना? कोई वास्तविक अस्पष्टता नहीं, कोई वास्तविक चित्रण आवश्यक नहीं है। निश्चित रूप से वाक्य रचनात्मक रूप से वैध है, लेकिन अनावश्यक प्रकार उम्र। देखो मेरा मतलब है? –

+2

@jimyi, मैंने अपना जवाब आगे बढ़ाया। धन्यवाद। @papayasoft, मैं मानता हूं कि यह आपके मामले में बहुत अनावश्यक है। मेरा अनुमान है कि यह स्वत: जेनरेट कोड है और वे सभी आधारों को कवर करने के लिए जटिल घुंघराले सिंटैक्स का उपयोग करते हैं। –

22

मैं सिर्फ वाक्य रचना पता है जब variable variables का उपयोग कर:

$userProp = 'id'; 
$this->_session->{'user_'.$userProp}; 
+1

+1 टीएफएम के उचित लिंक के साथ एकमात्र उत्तर के लिए +1, जैसा कि @ jimyi संकेत दिया गया है। ओ.पी. तारों के लिए जटिल (घुंघराले) वाक्यविन्यास के बारे में नहीं है। परिवर्तनीय चर में अस्पष्टताओं को हल करने के लिए यह घुंघराले ब्रेसिज़ के उपयोग के बारे में है। –

9

दो अपने प्रश्न में उदाहरण एक ही बात करते हैं। पीएचपी आप कई तरीकों से सदस्य डेटा/तरीकों का उपयोग करने की अनुमति देता है ...

object->{'name_of_member'}; 

object->name_of_member; 

$member = 'name_of_member'; 
object->$member; 
19

थेरेस शायद एक है कि वाक्य रचना के बड़ा लाभ है, तथापि, अपने आम तौर पर बालों वाले सामान के क्षेत्र में, और चीजों को आप शायद बचना चाहते हैं।

यह आपको वेरिएबल नामों में वर्णों का उपयोग करने की अनुमति देता है जो अन्यथा अप्राप्य हैं।

अर्थात्:

$this->object->{"hello world\0\n"} 
$this->object->{"function(){ this is a truely awful name for a variable }"} 
+6

हालांकि, आपके उदाहरणों के रूप में यह चरम होने की आवश्यकता नहीं है। उदाहरण के लिए, आप कल्पना कर सकते हैं कि उस डेटाबेस डेटा को डेटाबेस में संग्रहीत किया गया है, और "user_id" के बजाय "उपयोगकर्ता-आईडी" नामक एक कॉलम ... – mercator

+2

इसके अलावा, PHP के पुराने संस्करणों को स्ट्रिंग ISTR के सामने \ 0 डालकर आपको पिवेट वैरिएबल तक पहुंचने दें। अब कम से कम \ 0 आपको एक "आप ऐसा माफ कर सकते हैं" घातक अपवाद देता है। –

+5

+1 बिल्कुल भयानक और निडर दुःस्वप्न-प्रेरित करने वाले चर नामों के लिए +1। मैं वैसे भी सोने की योजना नहीं बना रहा था ... –

11

उदाहरण आप दे, वहाँ कोई वास्तविक अंतर है, और IMO $this->_session->user_id क्योंकि यह स्पष्ट है किया जाना चाहिए।

घुंघराले ब्रेस वाक्यविन्यास वास्तव में अच्छा है कि सदस्य नाम को $this->_session->{'user_id' . $index} जैसे अभिव्यक्ति का निर्माण करके सदस्य चर का उपयोग कर रहा है।

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