Где разница между 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