Где разница между 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 :: в основном используется для вызова постоянной переменной внутри класса.
$ 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