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