सदस्य चर के लिए PHP घुंघराले ब्रेस सिंटैक्स


79

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

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

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

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

$this->_session->user_id

मैं मान रहा हूं कि _ अधिशेष अप्रासंगिक है, लेकिन प्रश्न में इसे शामिल करना क्योंकि यह नहीं हो सकता है।

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

TFM में कोई संकेत तो मैं कर सकता हूँ विनम्रतापूर्वक सराहना की जाएगी।

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


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

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

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

जवाबों:


51

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

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 मैनुअल देखें , "जटिल (घुंघराले) वाक्यविन्यास।"


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

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

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

24

मैं चर चर का उपयोग करते समय सिंटैक्स जानता हूं :

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

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

19

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

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

अर्थात:

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

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

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

12

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

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


11

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

object->{'name_of_member'};

object->name_of_member;

$member = 'name_of_member';
object->$member;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.