2013-01-09 6 views
5

मैं स्ट्रिंग के भीतर जटिल (घुंघराले) वाक्यविन्यास के उपयोग को समझता हूं, लेकिन मुझे स्ट्रिंग के बाहर इसका उद्देश्य समझ में नहीं आता है।स्ट्रिंग प्रस्तुति के बाहर जटिल (घुंघराले) वाक्यविन्यास का उद्देश्य

मैं सिर्फ CakePHP में इस कोड है कि मैं नहीं समझ सकता पाया:

// $class is a string containg a class name 
${$class} =& new $class($settings); 

किसी मदद कर सकता है, तो मुझे क्यों यहाँ प्रयोग किया जाता है, और यह और के बीच अंतर क्या है:

$class =& new $class($settings); 

धन्यवाद।

+1

यह '$$ कक्षा 'भी हो सकता है। जांचें [इस बहुत विशिष्ट मामले के बारे में दस्तावेज़ीकरण] (http://php.net/manual/en/language.variables.variable.php) आप पूछ रहे हैं। – inhan

+0

+1, हाँ परिवर्तनीय चर, मैं बस भूल गया कि उन्हें $ {} के रूप में उपयोग किया जा सकता है। धन्यवाद –

उत्तर

4

सबसे आसान तरीका है उदाहरण के द्वारा होता है:

class FooBar { } 

// This is an ordinary string. 
$nameOfClass = "FooBar"; 

// Make a variable called (in this case) "FooBar", which is the 
// value of the variable $nameOfClass. 
${$nameOfClass} = new $nameOfClass(); 

if(isset($FooBar)) 
    echo "A variable called FooBar exists and its class name is " . get_class($FooBar); 
else 
    echo "No variable called FooBar exists."; 

${$something} या $$something का उपयोग करना। PHP में "परिवर्तनीय चर" के रूप में संदर्भित किया जाता है।

तो इस मामले में, $FooBar नामक एक नया चर बनाया गया है और परिवर्तनीय $nameOfClass अभी भी एक स्ट्रिंग है।

+0

मुझे 'चर परिवर्तनीय' पता था लेकिन मैं भूल गया था कि आप इस फॉर्म का उपयोग कर सकते हैं, मैंने केवल उन्हें $$ के साथ उपयोग किया। धन्यवाद, अब यह सब स्पष्ट है। –

0

पहला उदाहरण गतिशील रूप से नामित चर (नाम वर्ग चर का मान है) बनाता है, दूसरा वर्ग चर के मान को ओवरराइट करता है। इस को समझने के लिए

2

एक उदाहरण जहां स्ट्रिंग के बाहर जटिल (घुंघराले) वाक्यविन्यास का उपयोग आवश्यक होगा, अभिव्यक्ति से परिवर्तनीय नाम बनाते समय, केवल एक चर से अधिक होता है। निम्नलिखित कोड पर विचार करें:

$first_name="John"; 
$last_name="Doe"; 
$array=['first','last']; 
foreach ($array as $element) { 
    echo ${$element.'_name'}.' '; 
} 

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

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