Переменная $this - это псевдопеременная, которой нельзя присваивать никакие значения. Эта переменная выполняет весьма своеобразную роль в коде.

Слово "this" в переводе с английского означает "этот"; в коде PHP переменная $this применяется в значении $этот_объект и ссылается на тот объект, в коде которого она используется, т.е. проще говоря, заменяет название этого объекта. Для чего это нужно станет ясно из ниже приведённого примера:

  1     class Product {
  2         private $kind;
  3         private $cost;
  4         public function construct ($kind = ' ', $cost = 0) {
  5              $this -> kind = $kind;
  6              $this -> cost = $cost;
  7         }
  8     }
  9     $a1 = new Product ('Meet', 400);
 10    $b1 = $a1 -> kind;
 11    $b2 = $a1 -> cost;

Рассмотрим код подробно.

Строки 1-8: Создаётся класс Product ("Продукты").

Строки 2,3: Создаются переменные $kind ("Вид") и  $cost ("Стоимость").

Строки 4-7: Создаётся функция-конструктор, задача которой при создании объекта (т.е. экземпляра класса) получать значения свойств для этого объекта.

 Именно здесь и становится понятен смысл применения этой псевдопеременной: в выражении $this –> kind = $kind свойство kind объекта, в котором будет использован класс, получает значение переменной $kind, а на сам объект ссылается переменная $this, т.е. это можно было бы записать как $этот_объект –> kind = $kind.

Строка 9: Создаёт объект $a1 и присваивает ему значения 'Meat' ("Мясо") и 400.

 

 При создании объекта псевдопеременная $this принимает значение a1 в соответствии с названием создаваемого объекта.  Например, выражение, с помощью которого объект с названием a1 получает значение для свойства kind выглядело бы так: $a1 –> kind = $kind.

Строки 10-11: Переменные $b1  и $b2 получают значение соответствующего свойства объекта $a1.

Теперь становится понятно, почему псевдопеременной $this ничего нельзя присваивать: эта переменная сама принимает соответствующие значения.

 

Добавлять комментарии и ответы могут только пользователи, прошедшие регистрацию!
Зарегистрируйтесь и напишите своё мнение или ответ!