Где различие между сам и $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-> относится к текущему экземпляру (объект) класса (могло бы также быть неправильным). Однако, каково различие?

16
задан Lukáš Lalinský 22 December 2009 в 18:39
поделиться

5 ответов

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

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

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

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

.
17
ответ дан 30 November 2019 в 16:18
поделиться

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

То есть, другими словами, используете self для статики, а это для нестатических членов или методов.

.
13
ответ дан 30 November 2019 в 16:18
поделиться

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

.
3
ответ дан 30 November 2019 в 16:18
поделиться

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

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


Можно посмотреть на статическое ключевое слово (цитируя несколько строк) :

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

...

Невозможно получить доступ к статическим свойствам через объект с помощью стрелки оператор ->.


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

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

2
ответ дан 30 November 2019 в 16:18
поделиться

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

1
ответ дан 30 November 2019 в 16:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: