What does the variable $this mean in PHP?

前端 未结 10 1595

I see the variable $this in PHP all the time and I have no idea what it\'s used for. I\'ve never personally used it.

Can someone tell me how the variab

相关标签:
10条回答
  • 2020-11-22 05:30

    It refers to the instance of the current class, as meder said.

    See the PHP Docs. It's explained under the first example.

    0 讨论(0)
  • 2020-11-22 05:34

    It's a reference to the current object, it's most commonly used in object oriented code.

    • Reference: http://www.php.net/manual/en/language.oop5.basic.php
    • Primer: http://www.phpro.org/tutorials/Object-Oriented-Programming-with-PHP.html

    Example:

    <?php
    class Person {
        public $name;
    
        function __construct( $name ) {
            $this->name = $name;
        }
    };
    
    $jack = new Person('Jack');
    echo $jack->name;
    

    This stores the 'Jack' string as a property of the object created.

    0 讨论(0)
  • 2020-11-22 05:39

    It is the way to reference an instance of a class from within itself, the same as many other object oriented languages.

    From the PHP docs:

    The pseudo-variable $this is available when a method is called from within an object context. $this is a reference to the calling object (usually the object to which the method belongs, but possibly another object, if the method is called statically from the context of a secondary object).

    0 讨论(0)
  • 2020-11-22 05:42

    Lets see what happens if we won't use $this and try to have instance variables and constructor arguments with the same name with the following code snippet

    <?php
    
    class Student {
        public $name;
    
        function __construct( $name ) {
            $name = $name;
        }
    };
    
    $tom = new Student('Tom');
    echo $tom->name;
    
    ?>
    

    It echos nothing but

    <?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;
    
    ?>
    

    this echoes 'Tom'

    0 讨论(0)
  • 2020-11-22 05:43

    This is long detailed explanation. I hope this will help the beginners. I will make it very simple.

    First, let's create a class

    <?php 
    
    class Class1
    {
        
    }
    

    You can omit the php closing tag ?> if you are using php code only.

    Now let's add properties and a method inside Class1.

    <?php 
    
    class Class1
    {
        public $property1 = "I am property 1";
        public $property2 = "I am property 2";
    
        public function Method1()
        {
            return "I am Method 1";
        }
    }
    

    The property is just a simple variable , but we give it the name property cuz its inside a class.

    The method is just a simple function , but we say method cuz its also inside a class.

    The public keyword mean that the method or a property can be accessed anywhere in the script.

    Now, how we can use the properties and the method inside Class1 ?

    The answer is creating an instance or an object, think of an object as a copy of the class.

    <?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);
    

    We created an object, which is $object1 , which is a copy of Class1 with all its contents. And we dumped all the contents of $object1 using var_dump() .

    This will give you

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

    So all the contents of Class1 are in $object1 , except Method1 , i don't know why methods doesn't show while dumping objects.

    Now what if we want to access $property1 only. Its simple , we do var_dump($object1->property1); , we just added ->property1 , we pointed to it.

    we can also access Method1() , we do var_dump($object1->Method1());.

    Now suppose i want to access $property1 from inside Method1() , i will do this

    <?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()); 
    

    we created $object2 = new Class1; which is a new copy of Class1 or we can say an instance. Then we pointed to property1 from $object2

    return $object2->property1;
    

    This will print string(15) "I am property 1" in the browser.

    Now instead of doing this inside Method1()

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

    We do this

    return $this->property1;
    

    The $this object is used inside the class to refer to the class itself.

    It is an alternative for creating new object and then returning it like this

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

    Another example

    <?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());
    

    We created 2 properties containing integers and then we added them and put the result in $this->result.

    Do not forget that

    $this->property1 = $property1 = 119

    they have that same value .. etc

    I hope that explains the idea.

    This series of videos will help you a lot in OOP

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

    0 讨论(0)
  • 2020-11-22 05:43

    $this is a special variable and it refers to the same object ie. itself.

    it actually refer instance of current class

    here is an example which will clear the above statement

    <?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/>";
      }
    }
    ?> 
    
    0 讨论(0)
提交回复
热议问题