PHP में चर $ का क्या मतलब है?


103

मैं $thisहर समय PHP में चर देखता हूं और मुझे पता नहीं है कि इसका क्या उपयोग है। मैंने कभी व्यक्तिगत रूप से इसका उपयोग नहीं किया है।

क्या कोई मुझे बता सकता है कि चर $thisPHP में कैसे काम करता है?

जवाबों:


130

यह वर्तमान ऑब्जेक्ट का संदर्भ है, यह आमतौर पर ऑब्जेक्ट ओरिएंटेड कोड में सबसे अधिक उपयोग किया जाता है।

उदाहरण:

<?php
class Person {
    public $name;

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

$jack = new Person('Jack');
echo $jack->name;

यह 'जैक' स्ट्रिंग को बनाए गए ऑब्जेक्ट की संपत्ति के रूप में संग्रहीत करता है।


1
KillerPHP OOP में समान उदाहरण कोड देखा ट्यूटोरियल :) killerphp.com/tutorials/php-objects-page-1
एडसन

अच्छी और आसान व्याख्या। @meder omuraliev
पाई

40

$thisPHP में चर के बारे में जानने का सबसे अच्छा तरीका है कि इसे विभिन्न संदर्भों में दुभाषिया के खिलाफ आज़माया जाए:

print isset($this);              //true,   $this exists
print gettype($this);            //Object, $this is an object 
print is_array($this);           //false,  $this isn't an array
print get_object_vars($this);    //true,   $this's variables are an array
print is_object($this);          //true,   $this is still an object
print get_class($this);          //YourProject\YourFile\YourClass
print get_parent_class($this);   //YourBundle\YourStuff\YourParentClass
print gettype($this->container); //object
print_r($this);                  //delicious data dump of $this
print $this->yourvariable        //access $this variable with ->

इसलिए $thisछद्म चर में करंट ऑब्जेक्ट की विधि और गुण होते हैं। ऐसी चीज उपयोगी है क्योंकि यह आपको कक्षा के अंदर सभी सदस्य चर और सदस्य विधियों का उपयोग करने देती है। उदाहरण के लिए:

Class Dog{
    public $my_member_variable;                             //member variable

    function normal_method_inside_Dog() {                   //member method

        //Assign data to member variable from inside the member method
        $this->my_member_variable = "whatever";

        //Get data from member variable from inside the member method.
        print $this->my_member_variable;
    }
}

$thisएक PHP का संदर्भ है जो Objectआपके लिए दुभाषिया द्वारा बनाया गया था, जिसमें चर की एक सरणी होती है।

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

$thisयदि संदर्भ का कोई मूल उद्देश्य नहीं है, तो अपरिभाषित होना संभव है ।

php.net के पास PHP ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग के बारे में बात करने वाला एक बड़ा पेज है और यह $thisसंदर्भ के आधार पर कैसे व्यवहार करता है। https://www.php.net/manual/en/language.oop5.basic.php


महान व्याख्या। बस यह जोड़ना चाहूंगा कि इस $ को छद्म वस्तु / चर के रूप में माना जा सकता है जो वर्तमान वर्ग के गुणों तक पहुंचने में मदद करता है।
एस। इलावी

17

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

उदाहरण:

Class A
{
   public $myname;    //this is a member variable of this class

function callme() {
    $myname = 'function variable';
    $this->myname = 'Member variable';
    echo $myname;                  //prints function variable
    echo $this->myname;              //prints member variable
   }
}

उत्पादन:

function variable

member variable

9

यह अपने भीतर से एक वर्ग के उदाहरण को संदर्भित करने का तरीका है, कई अन्य ऑब्जेक्ट उन्मुख भाषाओं के समान है।

से पीएचपी डॉक्स :

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


7

देखते हैं कि क्या होता है अगर हम $ का उपयोग नहीं करेंगे और निम्न कोड स्निपेट के साथ एक ही नाम के साथ उदाहरण चर और निर्माण तर्क देने की कोशिश करेंगे

<?php

class Student {
    public $name;

    function __construct( $name ) {
        $name = $name;
    }
};

$tom = new Student('Tom');
echo $tom->name;

?>

यह कुछ भी नहीं है लेकिन

<?php

class Student {
    public $name;

    function __construct( $name ) {
        $this->name = $name; // Using 'this' to access the student's name
    }
};

$tom = new Student('Tom');
echo $tom->name;

?>

यह गूँज 'टॉम'


2
आपका कोड स्निपेट दोनों बिल्कुल समान हैं, या मैं कुछ याद कर रहा हूं?
डिमेंटो

@Demento: हाँ। मैंने इसे ठीक किया, $thisदूसरे कंस्ट्रक्टर में उपयोग किया।
एक्सल गिल्मिन

क्या आप यह समझाना चाहेंगे कि नाम = $ नाम अभ्यस्त मुझे छात्र के नाम का उपयोग करने की अनुमति क्यों देता है? यह मेरे लिए कोई मतलब नहीं है।
मार्को फ्लोरियानो

मारियो, यह गुंजाइश की वजह से है। फ़ंक्शन के अंदर $nameटॉम है, लेकिन फ़ंक्शन के बाहर, इसका कोई मूल्य नहीं है, क्योंकि इसका दायरा फ़ंक्शन तक सीमित है।
dearsina

4

जब आप एक वर्ग बनाते हैं तो आपके पास (कई मामलों में) चर और तरीके (उर्फ) कार्य होते हैं। यह $ उन उदाहरण चर को एक्सेस करता है ताकि आपके कार्य उन चर को ले सकें और वे कर सकें जो आपको उनके साथ चाहिए।

पदक के उदाहरण का एक और संस्करण:

class Person {

    protected $name;  //can't be accessed from outside the class

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

    public function getName() {
        return $this->name;
    }
}
// this line creates an instance of the class Person setting "Jack" as $name.  
// __construct() gets executed when you declare it within the class.
$jack = new Person("Jack"); 

echo $jack->getName();

Output:

Jack

3

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


2

$ यह एक विशेष चर है और यह उसी वस्तु को संदर्भित करता है। अपने आप।

यह वास्तव में वर्तमान वर्ग का उदाहरण है

यहाँ एक उदाहरण है जो उपरोक्त कथन को स्पष्ट करेगा

<?php
 class Books {
  /* Member variables */
  var $price;
  var $title;

  /* Member functions */
  function setPrice($par){
     $this->price = $par;
  }

  function getPrice(){
     echo $this->price ."<br/>";
  }

  function setTitle($par){
     $this->title = $par;
  }

  function getTitle(){
     echo $this->title ." <br/>";
  }
}
?> 

कृपया इसे थोड़ा और विस्तृत करें
नीरज राठौड़

2

यह लंबी विस्तृत व्याख्या है। मुझे उम्मीद है कि इससे शुरुआती लोगों को मदद मिलेगी। मैं इसे बहुत सरल बनाऊंगा।

सबसे पहले, एक वर्ग बनाते हैं

<?php 

class Class1
{
    
}

?>यदि आप केवल php कोड का उपयोग कर रहे हैं, तो आप php समापन टैग को छोड़ सकते हैं ।

अब चलो गुणों और एक विधि को अंदर जोड़ते हैं Class1

<?php 

class Class1
{
    public $property1 = "I am property 1";
    public $property2 = "I am property 2";

    public function Method1()
    {
        return "I am Method 1";
    }
}

संपत्ति सिर्फ एक साधारण चर है, लेकिन हम इसे एक वर्ग के अंदर cuz नाम संपत्ति देते हैं।

विधि सिर्फ एक सरल कार्य है, लेकिन हम कहते हैं कि विधि एक वर्ग के अंदर भी cuz है।

publicअर्थ है कि कीवर्ड कि विधि या एक संपत्ति लिपि में कहीं भी पहुँचा जा सकता है।

अब, हम गुणों और विधि का उपयोग कैसे कर सकते हैं Class1?

इसका उत्तर एक उदाहरण या एक वस्तु बना रहा है, एक वस्तु को कक्षा की एक प्रति के रूप में सोचें।

<?php 

class Class1
{
    public $property1 = "I am property 1";
    public $property2 = "I am property 2";

    public function Method1()
    {
        return "I am Method 1";
    }
}

$object1 = new Class1;
var_dump($object1);

हमने एक ऑब्जेक्ट बनाया, जो कि इसकी सभी सामग्रियों $object1के Class1साथ एक कॉपी है । और हमने $object1उपयोग की सभी सामग्री को डंप कर दिया var_dump()

यह आपको देगा

object(Class1)#1 (2) { ["property1"]=> string(15) "I am property 1" ["property2"]=> string(15) "I am property 2" }

तो सभी सामग्री में Class1हैं $object1, को छोड़कर Method1, मुझे नहीं पता कि क्यों वस्तुओं डंपिंग करते समय तरीके नहीं दिखाते हैं।

अब क्या होगा अगर हम $property1केवल एक्सेस करना चाहते हैं । इसका सरल, हम करते हैं var_dump($object1->property1);, हमने बस जोड़ा ->property1, हमने इसे इंगित किया।

हम भी पहुँच सकते हैं Method1(), हम करते हैं var_dump($object1->Method1());

अब मान लीजिए कि मैं $property1अंदर से एक्सेस करना चाहता हूं Method1(), तो मैं यह करूंगा

<?php 

class Class1
{
    public $property1 = "I am property 1";
    public $property2 = "I am property 2";

    public function Method1()
    {   
        $object2 = new Class1;
        return $object2->property1;
    }
}

$object1 = new Class1;
var_dump($object1->Method1()); 

हमने बनाया $object2 = new Class1;जो एक नई प्रति है Class1या हम एक उदाहरण कह सकते हैं। फिर हम की ओर इशारा property1से$object2

return $object2->property1;

यह string(15) "I am property 1"ब्राउज़र में प्रिंट होगा ।

अब अंदर ऐसा करने के बजाय Method1()

$object2 = new Class1;
return $object2->property1;

हम ऐसा करते हैं

return $this->property1;

$thisवस्तु वर्ग खुद को संदर्भित करने के वर्ग के अंदर किया जाता है।

यह नई वस्तु बनाने और फिर इसे इस तरह वापस करने का एक विकल्प है

$object2 = new Class1;
return $object2->property1;

एक और उदाहरण

<?php 

class Class1
{
    public $property1 = 119;
    public $property2 = 666;
    public $result;

    public function Method1()
    {   
        $this->result = $this->property1 + $this->property2;
        return $this->result;
    }
}

$object1 = new Class1;
var_dump($object1->Method1());

हमने पूर्णांक वाले 2 गुण बनाए और फिर हमने उन्हें जोड़ा और परिणाम को अंदर रखा $this->result

मत भूलना

$this->property1= $property1=119

उनका वही मूल्य है .. आदि

मुझे आशा है कि विचार की व्याख्या करता है।

वीडियो की यह श्रृंखला आपको OOP में बहुत मदद करेगी

https://www.youtube.com/playlist?list=PLe30vg_FG4OSEHH6bRF8FrA7wmoAMUZLv


1

यह वर्तमान वर्ग के उदाहरण को संदर्भित करता है, जैसा कि मेडर ने कहा।

PHP डॉक्स देखें । इसे पहले उदाहरण के तहत समझाया गया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.