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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. this-> не может получить доступ к статическому методу или статическому атрибуту, мы используем self для доступа к ним.
  2. $ 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