2013-05-06 3 views
19

मैं पहुँच करने की आवश्यकता का सामना करना पड़ा/जैसे एक चर बदलने के लिए:

$this->{$var} 

संदर्भ सीआई datamapper नियम पाने के साथ है। मुझे लगता है कि यह वाक्यविन्यास वास्तव में क्या करता है यह नहीं लगता है। {इस संदर्भ में क्या करते हैं? क्यों नहीं:

$this->var 

धन्यवाद!

उत्तर

36

यह परिवर्तनीय चर है, जैसे कि आप $this->{value-of-$val} के साथ समाप्त हो जाएंगे।

देखें: http://php.net/manual/en/language.variables.variable.php

उदाहरण के लिए

तो:

$this->a = "hello"; 
$this->b = "hi"; 
$this->val = "howdy"; 

$val = "a"; 
echo $this->{$val}; // outputs "hello" 

$val = "b"; 
echo $this->{$val}; // outputs "hi" 

echo $this->val; // outputs "howdy" 

echo $this->{"val"}; // also outputs "howdy" 

कार्य उदाहरण: http://3v4l.org/QNds9

निश्चित रूप से

यह एक वर्ग के संदर्भ में काम कर रहा है। आप इस तरह बस के रूप में आसानी से एक स्थानीय संदर्भ में चर चर का उपयोग कर सकते हैं:

$a = "hello"; 
$b = "hi"; 

$val = "a"; 
echo $$val; // outputs "hello" 

$val = "b"; 
echo $$val; // outputs "hi" 

कार्य उदाहरण: http://3v4l.org/n16sk

+6

हम्म '$ ऑब्जेक्ट-> attr' =' $ ऑब्जेक्ट -> {"attr"} ':) –

+0

@ डेव चेन ने उस उदाहरण के साथ अपना उत्तर अपडेट किया है साथ ही – jszobody

+2

मुझे याद है जब मैंने शुरू किया, मैंने कुछ ऐसा करने की कोशिश की, $ यह -> $ वैल' और बुरी तरह विफल रहा। यह जवाब देखने के लिए अच्छा लगा। –

8

$this->{$var} और $this->var सभी दो बहुत अलग बातें हैं सबसे पहले। उत्तरार्द्ध var वर्ग चर का अनुरोध करेगा जबकि अन्य $var की स्ट्रिंग में निहित चर के नाम का अनुरोध करेगा। यदि $var स्ट्रिंग 'foo' है तो यह $this->foo और अन्य अनुरोध करेगा।

यह गतिशील प्रोग्रामिंग (जब आप केवल रनटाइम पर चर के नाम को जानते हैं) के लिए उपयोगी है।

${'y - x'} = 'Ok'; 
$var = 'y - x'; 
echo ${$var}; 

Ok प्रिंट होगा, भले ही चर नाम y - x क्योंकि रिक्त स्थान और - चरित्र की मान्य नहीं है: आप अजीब चर नाम है, खासकर जब लेकिन एक स्ट्रिंग संदर्भ में क्लासिक {} अंकन बहुत शक्तिशाली है।

+1

+1 भी जोड़ा है! मैं कभी नहीं जानता था कि परिवर्तनीय नाम जटिल हो सकते हैं। तो, क्या आप एक सरणी/वस्तु को चर नाम के रूप में रख सकते हैं? –

+1

@ डेवचेन, उनकी स्ट्रिंग प्रस्तुति हां। हालांकि मुझे लगता है कि परिवर्तनीय नामों की लंबाई सीमा है। मुझे नहीं लगता कि इसे एक अच्छा अभ्यास माना जाता है, इसलिए मैं इससे बचूंगा। – Shoe

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