Where's the difference between self and $this-> in a PHP class or PHP method?

后端 未结 7 1179
不思量自难忘°
不思量自难忘° 2020-12-17 09:38

Where\'s the difference between self and $this-> in a PHP class or PHP method?

Example:

I\'ve seen this code recently.

相关标签:
7条回答
  • 2020-12-17 09:45

    self is used at the class-level scope whereas $this is used at the instance-level scope.

    0 讨论(0)
  • 2020-12-17 09:58

    $this is used to reference methods and properties of the current instance of a class.

    self us used to reference static methods and properties, shared by all instances (and even accessible outside of any instance) of a class.


    You can take a look at Static Keyword (quoting a few lines) :

    Declaring class properties or methods as static makes them accessible without needing an instantiation of the class. A property declared as static can not be accessed with an instantiated class object (though a static method can)

    ...

    Static properties cannot be accessed through the object using the arrow operator ->.


    And, from the page Properties (quoting) :

    Within class methods the properties, constants, and methods may be accessed by using the form $this->property (where property is the name of the property) unless the access is to a static property within the context of a static class method, in which case it is accessed using the form self::$property.

    0 讨论(0)
  • 2020-12-17 10:01

    $this refers to the instance of the class, that is correct. However, there is also something called static state, which is the same for all instances of that class. self:: is the accessor for those attributes and functions.

    Also, you cannot normally access an instance member from a static method. Meaning, you cannot do

    static function something($x) {
      $this->that = $x;
    }
    

    because the static method would not know which instance you are referring to.

    0 讨论(0)
  • 2020-12-17 10:01
    1. this-> can't access static method or static attribute , we use self to access them.
    2. $this-> when dealing with extended class will refer to the current scope that u extended , self will always refer to the parent class because its doesn't need instance to access class method or attr its access the class directly.

      <?php
      class FirstClass{
        function selfTest(){
          $this->classCheck();
          self::classCheck();
        } 
        function classCheck(){
          echo "First Class";
        }
      }
      class SecondClass extends FirstClass{
          function classCheck(){
            echo "Second Class";
          }
      }
      $var = new SecondClass();
      $var->selfTest(); //this-> will refer to Second Class , where self refer to the parent class
      
    0 讨论(0)
  • 2020-12-17 10:03

    $this refers to the current object, self refers to the current class. The class is the blueprint of the object. So you define a class, but you construct objects.

    So in other words, use self for static and this for non-static members or methods.

    0 讨论(0)
  • 2020-12-17 10:05

    self refers to the calling object's class. $this refers to the object itself.

    0 讨论(0)
提交回复
热议问题