Где разница между 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 для static и для нестатических элементов или методов.
  self используется в области уровня класса, тогда как $this используется в области уровня экземпляра. 
  $this используется для ссылки на методы и свойства текущего экземпляра класса. 
  self мы использовали для ссылки на статические методы и свойства, разделяемые всеми экземплярами (и даже доступными вне любого экземпляра) класса. 
Вы можете взглянуть на статическое ключевое слово (несколько строк) :
Объявление свойств класса или методов как статических делает их доступными без необходимости создания экземпляра класса. Свойство, объявленное как статическое, не может быть доступно с помощью объекта экземпляра класса (хотя может использоваться статический метод)
…
Статические свойства не могут быть доступны через объект с помощью оператора стрелки ->.
И, со страницы Свойства (цитирование) :
В рамках методов класса свойства, константы и методы могут быть доступны с помощью
$this->property(propertyis$this->property(гдеproperty– это имя свойства), если только доступ не является статическим свойством в контексте метода статического класса, в в этом случае он доступен с использованиемself::$property.
  self относится к классу вызывающего объекта.  $this относится к самому объекту. 
$ this используется для вызова экземпляра класса, где self :: в основном используется для вызова постоянной переменной внутри класса.
$ this-> при работе с расширенным классом будет ссылаться на текущую область действия, которую u расширил, self всегда будет ссылаться на родительский класс, потому что ему не нужен экземпляр для доступа к методу класса или к его непосредственному доступу к классу.
 <?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