2010-02-05 20 views
12

मुझे आश्चर्य है कि $this->name और $this->$name के बीच क्या अंतर है? $this को कड़ाई से नामित किया जाना चाहिए या यह कुछ भी हो सकता है?

उत्तर

20

$this एक आरक्षित चर नाम है और इसे किसी और चीज़ के लिए उपयोग नहीं किया जा सकता है। यह विशेष रूप से उस ऑब्जेक्ट को इंगित करता है जिसमें आप वर्तमान में काम कर रहे हैं। आपको $this का उपयोग करना होगा क्योंकि आप नहीं जानते कि किस चर वस्तु को असाइन किया जाएगा।

$this->namename

$this->$name वर्ग चर जो कुछ भी की $name का मूल्य है को संदर्भित करता है वर्तमान वर्ग के चर को दर्शाता है। इस प्रकार

$name = "name"; 
echo $this->$name; // echos the value of $this->name. 

$name = "test"; 
echo $this->$name; // echos the value of $this->test 
6

$ इस एक आरक्षित पीएचपी में इस्तेमाल (quoting) में वर्ग आप इसे प्रयोग कर रहे हैं की वर्तमान उदाहरण को इंगित करने के नाम है:

छद्म चर $this उपलब्ध है जब किसी विधि को ऑब्जेक्ट संदर्भ में से कॉल किया जाता है।
$this एक संदर्भ बुला वस्तु (विधि अंतर्गत आता है आमतौर पर वस्तु जो करने के लिए, लेकिन संभवतः किसी अन्य वस्तु, अगर विधि एक माध्यमिक वस्तु की संदर्भ से स्थिर कहा जाता है) के लिए है।


जब $this->name उपयोग कर, आप नाम वर्तमान वस्तु के name साथ संपत्ति तक पहुँच रहे हैं। आप संपत्ति जो नाम $name स्थानीय चर में निहित है पर पहुंच जाएंगे, जिसका अर्थ है -


जब $this->$name का उपयोग कर, $ नाम संपत्ति एक्सेस करने से पहले निर्धारित किया जाता है।

उदाहरण के लिए

, कोड के इस भाग के साथ:

$name = 'abc'; 
echo $this->$name; 

आप, एबीसी संपत्ति की सामग्री वास्तव में गूंज जाएगा जैसे कि आप लिखा था:

echo $this->abc; 

जब ऐसा कर रही है, आप का उपयोग कर रहे variable variables(के हवाले से):

कक्षा गुण एक हो सकता है परिवर्तनीय संपत्ति नामों का उपयोग कर तक पहुंचा जा सकता है।
परिवर्तनीय संपत्ति का नाम होगा जो कॉल के दायरे में हल किया गया है।
उदाहरण के लिए, यदि आप एक अभिव्यक्ति है ऐसे $foo->$bar के रूप में, तो स्थानीय गुंजाइश $bar के लिए जांच की जाएगी और इसके मूल्य रूप $foo की संपत्ति के नाम पर इस्तेमाल किया जाएगा।
यह भी सत्य है यदि $ bar एक सरणी पहुंच है।

+0

आपको अपने वाक्यविन्यास में कोई त्रुटि है। डबल कोट्स के साथ सिंगल कोट्स मिलाकर हम हैं? (इसे ठीक करने का प्रयास किया, और आपने मुझे ओवरराइट किया) –

+0

@ चाचा: एर्ग, एक बार फिर, सुबह बहुत जल्दी ^^ धन्यवाद यह देखने के लिए धन्यवाद :-) - हुहु, हम दोनों ने उस समस्या को ठीक करने के लिए अपना जवाब संपादित किया, मैं देखता हूं :- डी ;; और हमने एक ही समय में हमारी टिप्पणियां संपादित की :- डी –

+0

यदि हम प्रोग्रामिंग कर रहे थे, तो हम डूब जाएंगे क्योंकि स्टैक ओवरफ्लो में टिप्पणी चेकआउट/ताले नहीं हैं :) –

2

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

class Test 
{ 
    public $bar = 'bar'; 
    public $foo = 'foo'; 

    public function __construct() 
    { 
     $bar = 'foo'; 

     $this->bar; // bar 
     $this->$bar; // foo 
    } 
} 
संबंधित मुद्दे