Где различие между 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->
относится к текущему экземпляру (объект) класса (могло бы также быть неправильным). Однако, каково различие?
$this
относится к экземпляру класса, то есть верно. Однако есть еще кое-что, что называется статическим состоянием, что одинаково для всех экземпляров этого класса. self::
является доступным для этих атрибутов и функций.
Кроме того, обычно нельзя получить доступ к элементу экземпляра из статического метода. Это значит, что нельзя сделать
static function something($x) {
$this->that = $x;
}
, так как статический метод не будет знать, на какой экземпляр вы ссылаетесь.
.$this
относится к текущему объекту, self
относится к текущему классу. Класс является образцом объекта. То есть вы определяете класс, но строите объекты.
То есть, другими словами, используете self для статики, а это для нестатических членов или методов.
.self
используется в области видимости на уровне класса, в то время как $this
используется в области видимости на уровне экземпляра.
$this
используется для ссылок на методы и свойства текущего экземпляра класса.
self
мы использовали для ссылок на статические методы и свойства, общие для всех экземпляров (и даже доступные вне любого экземпляра) класса.
Можно посмотреть на статическое ключевое слово (цитируя несколько строк) :
Объявление свойств или методов класса поскольку статическое электричество делает их доступными без необходимости инстанцирования в классе. Имущество, заявленное как статическое не может быть доступно с помощью инстанцированный объект класса (хотя статический метод может)
...
Невозможно получить доступ к статическим свойствам через объект с помощью стрелки оператор ->.
И, со страницы Properties (quoting) :
Внутри методов класса свойства, постоянные, и методы могут быть доступны используя форму
$this->property
(гдеproperty
- имя свойства), если доступ не имеет значения a статическое свойство в контексте статический метод класса, и в этом случае доступ к нему осуществляется с помощью формыself::$property
.
self
относится к классу вызывающего объекта. $this
ссылается на сам объект.