2010-11-14 11 views
9

संभव डुप्लिकेट:
What does $$ (dollar dollar or double dollar) mean in PHP?डबल डॉलर साइन php

मैं अपने नियंत्रकों में से एक में कोड के इस प्रकार का उपयोग कर अपने आप को पाया:

foreach(get_object_vars($this->view) as $property=>$value){ 
    $$property = $value; 
} 

वहाँ का उपयोग कर के साथ किसी भी समस्या है $$ संपत्ति को "स्थानीयकरण" गुणों को सरल $ चर में देखने के लिए?

संपादित करें:

मुझे लगता है कि इस कोड को एक दृश्य-विशिष्ट विधि के दायरे में चलाया जाता है जोड़ना चाहिए, इसलिए वहाँ अधिभावी स्थानीय चर की कोई समस्या नहीं है। यह आप में से कुछ लोगों को स्थानीय चर को ओवरराइड करने की समस्या को इंगित करने से रोकने के लिए है।

+2

संभावित डुप्लिकेट [PHP में $$ का अर्थ क्या है?] (Http://stackoverflow.com/questions/2715654/what-does-mean-in-php) – Charles

उत्तर

17

PHP में $$ के साथ समस्या यह है कि आप अज्ञात चर नाम बनाते हैं, जो आपके द्वारा पहले से उपयोग किए जाने वाले वेरिएबल नामों को ओवरराइड कर सकते हैं। यह सूक्ष्म प्रोग्रामिंग त्रुटियों का स्रोत है, और आमतौर पर इसका उपयोग नहीं किया जाना चाहिए।

+0

धन्यवाद, समझ में आता है। हालांकि, अगर मैं इसे व्यू ऑब्जेक्ट के संदर्भ में उपयोग करता हूं, जहां केवल वही गुण दृश्य स्क्रिप्ट द्वारा उपयोग किए जाने वाले मान हैं, तो भी मैं इसे आसानी से उपयोग कर सकता हूं। – Slavic

+4

मैं इस जवाब से असहमत हूं। यदि आप इसे व्यू ऑब्जेक्ट में उपयोग कर रहे हैं तो आप सीमित दायरे में हैं। $$ केवल एक समस्या है यदि आप हमेशा वैश्विक क्षेत्र में काम कर रहे हैं जो आप कर रहे हैं यदि आप एक एमवीसी संरचना का उपयोग कर रहे हैं। यदि आपकी व्यू ऑब्जेक्ट को वास्तव में कुछ 'आरक्षित' वेरिएबल्स की आवश्यकता है जिन्हें आप ओवरराइड नहीं करना चाहते हैं, तो इसे '$ _var' जैसा नाम दें ताकि आप इसे गलती से ओवरराइड नहीं कर सकें। –

+1

यही कारण है कि मैंने "आम तौर पर" लिखा था। स्लाव को पता है कि वह क्या कर रहा है। – Erik

1

नहीं, यह करने का तरीका है और अगर मैं गलत नहीं हूं तो एकमात्र तरीका है। हालांकि मेरा सवाल यह पूछना होगा कि आप वस्तु चर का उपयोग करने के बजाय ऐसा क्यों करना चाहते हैं।

+0

ऐसा इसलिए है क्योंकि मैं एक दृश्य स्क्रिप्ट को मान प्रदान करता हूं , जो $- मूल्य फैशन की बजाय $ मूल्य फैशन में अधिक सुंदर मूल्यों तक पहुंचता है। – Slavic

5

ठीक है, आप बस extract() फ़ंक्शन का उपयोग कर सकते हैं। इसके अलावा कि टुकड़ा: get_object_vars($this->view) इंगित करता है कि आपको उन चरों को स्टोर करने के लिए कुछ सरणी चाहिए, न कि ऑब्जेक्ट।

+0

निकालें केवल सरणी के लिए काम करता है। किसी ऑब्जेक्ट का उपयोग करने के कारण अंतर्निहित कोड संरचना के कारण हैं। मुझे get_object_vars() का उपयोग करने में कोई समस्या नहीं दिखाई दे रही है; – Slavic

+0

और शायद आप skippingly निकालना चाहते हैं, तो कोई चर ओवरराइट नहीं किया जाता है। – NikiC

-1

स्वीकृत उत्तर इतना गलत है !!! डबल डॉलर समस्या का कारण नहीं है, और इसे इस तरह नहीं माना जाना चाहिए! डबल डॉलर वाक्यविन्यास वास्तव में एक शानदार PHP सुविधा है जो कई परिस्थितियों में उपयोगी हो सकती है!

और यदि आपको डर है कि आप इसका उपयोग करके अन्य चर को ओवरराइड कर रहे हैं, तो इसका मतलब है कि आपने खराब कोड लिखा है! और वैसे भी, इस वाक्यविन्यास का उपयोग अधिक अनुभवी प्रोग्रामर द्वारा किया जाता है, इसलिए शुरुआती लोगों को इससे बचना चाहिए, जब तक कि वे क्या कर रहे हैं, इस बारे में अधिक सुनिश्चित न हो जाएं।

जहां यह वास्तव में उपयोगी अन्य चर, गतिशील चर, नास्तिक चर के मूल्य के आधार पर चर के माध्यम से पाशन है कुछ स्थितियों, आदि

फिर, मेरे पास कह रही है कि डबल डॉलर एक शक्तिशाली सुविधा है द्वारा चलो और इस तरह से इलाज किया जाना चाहिए! महान शक्ति के साथ महान जिम्मेदारी आती है!

+2

शक्तिशाली, शक्तिशाली नहीं, लेकिन जुड़े प्रश्न से ऐसा लगता है कि यह केवल (सरल रूप) 'eval' के लिए शॉर्टकट है। क्या इससे परे कुछ भी करता है? – greenoldman

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