2010-12-21 12 views
8

आप PHP में $this कीवर्ड का उपयोग कब करेंगे? जो मैं समझता हूं $this ऑब्जेक्ट नाम जानने के बिना बनाए गए ऑब्जेक्ट को संदर्भित करता है।आप PHP में इस कीवर्ड का उपयोग कब करेंगे?

इसके अलावा कीवर्ड $this केवल एक विधि के भीतर उपयोग किया जा सकता है?

एक उदाहरण यह दिखाने के लिए बहुत अच्छा होगा जब आप $this का उपयोग कर सकते हैं।

+10

http://php.net/OOP -> मूल बातें। –

+3

विशेष रूप से, नोट उदाहरण # 2 यहां: http://php.net/manual/en/language.oop5.basic.php – RabidFire

+0

'$ यह PHP में कोई कीवर्ड नहीं है (लेकिन एक * छद्म-परिवर्तनीय *), इसलिए आपके प्रश्न का उत्तर नहीं दिया जा सकता है। – hakre

उत्तर

6

एक कक्षा में अपने स्वयं के स्थिरांक, चर (जिसे "गुण" कहा जाता है), और फ़ंक्शन ("विधियों" कहा जाता है) हो सकते हैं।

<?php 
class SimpleClass 
{ 
    // property declaration 
    public $var = 'a default value'; 

    // method declaration 
    public function displayVar() { 
     echo $this->var; 
    } 
} 
?> 

$ इसके कुछ उदाहरणों में छद्म चर:

<?php 
class A 
{ 
    function foo() 
    { 
     if (isset($this)) { 
      echo '$this is defined ('; 
      echo get_class($this); 
      echo ")\n"; 
     } else { 
      echo "\$this is not defined.\n"; 
     } 
    } 
} 

class B 
{ 
    function bar() 
    { 
     // Note: the next line will issue a warning if E_STRICT is enabled. 
     A::foo(); 
    } 
} 

$a = new A(); 
$a->foo(); 

// Note: the next line will issue a warning if E_STRICT is enabled. 
A::foo(); 
$b = new B(); 
$b->bar(); 

// Note: the next line will issue a warning if E_STRICT is enabled. 
B::bar(); 
?> 

ऊपर के उदाहरण होगा उत्पादन:

  • $ इस परिभाषित किया गया है (ए)
  • $ यह नहीं है परिभाषित।
  • $ यह परिभाषित किया गया है (बी)
  • $ यह परिभाषित नहीं किया गया है।
1

यह ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग (OOP) में किया जाता है:

<?php 
class Example 
{ 
    public function foo() 
    { 
     //code 
    } 

    public function bar() 
    { 
     $this->foo(); 
    } 
} 

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

2

यदि आप PHP में ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग कर रहे हैं तो आप केवल $ का उपयोग करेंगे। मतलब यदि आप कक्षाएं बना रहे हैं। यहाँ एक उदाहरण है:

class Item { 
    protected $name, $price, $qty, $total; 

    public function __construct($iName, $iPrice, $iQty) { 
    $this->name = $iName; 
    $this->price = $iPrice; 
    $this->qty = $iQty; 
    $this->calculate(); 
    } 

} 
+0

धन्यवाद! मैं समझता हूं कि क्या आप कभी भी इस विधि के बाहर $ का उपयोग करेंगे? – Imran

+0

सही, आप नहीं करेंगे क्योंकि यह केवल कक्षा में ही समझ में आता है। इसके बाहर आप ऑब्जेक्ट का उपयोग करेंगे, जैसे कि $ a = new item(), आप $ a-> methodName() –

1

एक बार मैं जानता हूँ कि मैं का उपयोग कर this अन्य भाषाओं में बराबर एक 'Fluent' इंटरफ़ेस को लागू करने के लिए है अंत; प्रत्येक वर्ग विधि जो अन्यथा void लौटाएगी, इसके बजाय this लौटाएगी, ताकि विधि कॉल आसानी से एक साथ बंधे जा सकें।

public function DoThis(){ 
    //Do stuff here... 
    return $this; 
} 
public function DoThat(){ 
    //do other stuff here... 
    return $this; 
} 

ऊपर तो जैसे कहा जा सकता है:

myObject->DoThis()->DoThat(); 

कौन सा कुछ बातों के लिए उपयोगी हो सकता है।

+0

कर सकते हैं, इसका मतलब है कि इसे 'myObject-> DoThis() -> DoThat() ' ;-)? – thedom

+0

@ thedom - hehe ... क्षमा करें; मैं शायद ही कभी PHP में काम करता हूं और लगभग कभी ओओपी/PHP नहीं करता हूं। मैं इसे ठीक कर दूंगा ... उस मूर्खतापूर्ण त्रुटि के बारे में सिर-अप के लिए धन्यवाद! :) –

+0

कोई समस्या नहीं ... मैंने बस सोचा और आत्मविश्वास नहीं था कि इसे कैसे करें: पी // संपादित करें ... $ myObject-> DoThis() -> DoThat() निश्चित रूप से लॉल! – thedom

0

मुझे नहीं लगता कि आपका विचार गलत है .. $this का उपयोग उसी वर्ग के किसी ऑब्जेक्ट को संदर्भित करने पर किया जाता है ..इस

की तरह लगता है कि हम एक चर मूल्य $ वर और में है कि उस वस्तु की उदाहरण 5 सेट किया जाना चाहिए

$ this-> var = 5 है;

3

सबसे सामान्य उपयोग केस ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग के भीतर है, जबकि कक्षा के भीतर परिभाषित या काम करना। उदाहरण के लिए:

class Horse { 
    var $running = false; 

    function run() { 
     $this->running = true; 
    } 
} 

आप देख सकते हैं, run समारोह के भीतर, हम $this चर हार्स वर्ग कि हम कर रहे हैं "में" के उदाहरण का उल्लेख करने के लिए उपयोग कर सकते हैं। तो दूसरी बात ध्यान में रखना है कि यदि आप 2 हॉर्स कक्षाएं बनाते हैं, तो $this प्रत्येक के अंदर परिवर्तनीय घोड़े वर्ग के उस विशिष्ट उदाहरण को संदर्भित करेगा, न कि दोनों के लिए।

1

जब आप स्थानीय चर के साथ काम करना चाहते हैं तो प्रयुक्त होता है।

आप इसके बारे में here से और भी पढ़ सकते हैं।

function bark() { 
    print "{$this->Name} says Woof!\n"; 
} 
0

उपयोग $ इस तरीके या उदाहरण चर वर्तमान वस्तु

$ इस- से संबंधित संदर्भ के लिए है> नाम = $ नाम या $ this-> callSomeMethod()

कि वर्तमान वस्तु subclassed या नहीं में लागू चर या विधि का उपयोग करने जा रहा है।

आप विशेष रूप से माता पिता वर्ग के के एक कार्यान्वयन आप

माता पिता :: callSomeMethod()

1

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

class MyClass { 
    private $name; 

    public function setName($name) { 
     $this->name = $name; 
    } 

    //vs 
    public function setName($pName) { 
     $name = $pName; 
    } 
} 

: तो तुम जैसे काम कर सकें

class MyClass2 { 
    private $firstName; 
    private $lastName; 

    public function setFirstName($name) { 
     $this->firstName = $name; 
     return $this; 
    } 

    public function setLastName($name) { 
     $this->lastName = $name; 
     return $this; 
    } 

    public function sayHello() { 
     print "Hello {$this->firstName} {$this->lastName}"; 
    } 
} 

//And now you can do: 
$newInstance = new MyClass2; 
$newInstance->setFirstName("John")->setLastName("Doe")->sayHello(); 
1

$ इस जब आप एक वस्तु का एक नया उदाहरण बनाया है प्रयोग किया जाता है।

उदाहरण के लिए, इस कल्पना:

class Test { 
    private $_hello = "hello"; 

    public function getHello() { 
     echo $this->_hello; // note that I removed the $ from _hello ! 
    } 

    public function setHello ($hello) { 
     $this->_hello = $hello; 
    } 
} 

विधि getHello को उपयोग करने के लिए, मैं इस तरह, वर्ग टेस्ट का एक नया उदाहरण बनाने के लिए:

$obj = new Test(); 
// Then, I can access to the getHello method : 
echo $obj->getHello(); 
// will output "hello" 

$obj->setHello("lala"); 
echo $obj->getHello(); 
// will output "lala"  

वास्तव में , जब यह instancied, कक्षा के अंदर $ यह प्रयोग किया जाता है। इसे स्कोप के रूप में प्रस्तुत किया जाता है।

अपनी कक्षा के अंदर आप का उपयोग $ इस (तक पहुँचने * $ के लिए _ हैलो * उदाहरण के लिए), लेकिन कक्षा के बाहर, $ इस अपने वर्ग के भीतर तत्वों का उल्लेख नहीं करता है (जैसे * $ _ हैलो *), यह $ obj जो करता है।

अब, $ obj और के बीच मुख्य अंतर $ इस है $ obj पहुँच बाहर से अपनी कक्षा के बाद से, कुछ प्रतिबंध होता है: अगर आप कुछ परिभाषित निजी या संरक्षित में अपनी कक्षा, मेरे चर * $ _ नमस्ते *, जैसे $ objCAN नहीं पहुँच यह (यह निजी है!), लेकिन $ इसकर सकते हैं, $ becase इस le कक्षा के अंदर एवी।

-1
<?php 
    class identity { 
    public $name; 
    public $age; 
    public function display() { 
     return $this->name . 'is'. $this->age . 'years old'; 
    } 
    } 
?> 
संबंधित मुद्दे