Подтвердить что ты не робот

Где разница между self и $this-> в PHP-классе или методе PHP?

Где разница между self и $this-> в PHP-классе или методе PHP?

Пример:

Я недавно видел этот код.

public static function getInstance() {

    if (!self::$instance) {
        self::$instance = new PDO("mysql:host='localhost';dbname='animals'", 'username', 'password');;
        self::$instance-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    return self::$instance;
}

Но я помню, что $this-> относится к текущему экземпляру (объекту) класса (также может быть и неправильным). Однако какая разница?

4b9b3361

Ответ 1

$this относится к экземпляру класса, это правильно. Тем не менее, есть также что-то, называемое статическим состоянием, которое одинаково для всех экземпляров этого класса. self:: является аксессуаром для этих атрибутов и функций.

Кроме того, вы не можете нормально обращаться к элементу экземпляра из статического метода. Значит, вы не можете сделать

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

потому что статический метод не знал бы, к какому экземпляру вы обращаетесь.

Ответ 2

$this относится к текущему объекту, self относится к текущему классу. Класс - это проект объекта. Таким образом, вы определяете класс, но вы строите объекты.

Иными словами, используйте self для static и для нестатических элементов или методов.

Ответ 3

self используется в области уровня класса, тогда как $this используется в области уровня экземпляра.

Ответ 4

$this используется для ссылки на методы и свойства текущего экземпляра класса.

self нас использовали для ссылки на статические методы и свойства, общие для всех экземпляров (и даже доступные вне любого экземпляра) класса.


Вы можете взглянуть на Статическое ключевое слово (со ссылкой на несколько строк):

Объявление свойств или методов класса как статичность делает их доступными без необходимости создания класс. Имущество, объявленное как статические не могут быть доступны с помощью экземпляр объекта класса (хотя статический метод может)

...

Статические свойства недоступны через объект, используя стрелку оператор → .


И, со страницы Properties (цитирование):

В рамках методов класса свойства, константы и методы могут быть доступны используя форму $this->property(где property - это имя свойства), если только доступ к статическое свойство в контексте метод статического класса, и в этом случае к нему обращаются, используя форму self::$property.

Ответ 5

self относится к классу вызывающего объекта. $this относится к самому объекту.

Ответ 6

$this используется для вызова экземпляра класса, где self:: используется в основном для вызова постоянной переменной внутри класса.

Ответ 7

  • this- > не может получить доступ к статическому методу или статическому атрибуту, мы используем self для доступа к ним.
  • $this- > при работе с расширенным классом будет ссылаться на текущую область действия, которую u расширил, self всегда будет ссылаться на родительский класс, потому что ему не нужен экземпляр для доступа к методу класса или attr его доступ к классу непосредственно.

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