Классы и объекты
Объектно-ориентированное программирование (ООП), которое используется в PHP начиная с 5 версии, предоставляет программисту возможность создавать любое количество экземпляров одного и того же класса, называемых объектами; при этом каждый образованный экземпляр получает свое имя. Объект может принимать данные, называемые аргументами, обрабатывать их при помощи функций и выдавать результат. Любая функция класса может обращаться к его свойствам не на прямую, а только через конструкцию объект->свойство, поэтому возникает вопрос: как написать такой универсальный код, который позволит работать с данными любому образованному объекту независимо от его имени? Рассмотрим пример, отображенный на рисунке 1.
Данный код объявляет класс Mathematics, имеющий переменную (свойство) digit и две функции (метода), одна из которых является конструктором, т.е. автоматически запускается при создании нового объекта. Задача функции-конструктора - присвоить свойству digit данные, получаемые аргументом $dig при создании объекта. Метод getDigit() при его вызове возвращает значение свойства digit.
Далее рассмотрим строки 12 и 13. В них создаются два новых экземпляра класса Mathematics, один из которых получает в качестве аргумента число 5, а другой - 7. Эти значения функцией конструктором присваиваются переменной (свойству) private $digit, доступной только внутри класса. Каждый созданный объект присваивается переменным $a и $bсоответственно (если говорить точнее, то эти переменные получают только ссылки на указанные объекты, но это в данный момент не имеет значения). Теперь можно получить значения свойства digit простым вызовом метода getDigit (строки 15 и 16).
Назначение псевдопеременной $this
Обратите внимание: у нас имеются два разных объекта, имеющих абсолютно одинаковые методы. Каким же образом метод получает информацию о том, данные какого объекта нужно обрабатывать, если его код был прописан еще до создания этого объекта?
И вот здесь приходит на помощь псевдопеременная $this. Ее название можно перевести с английского как «этот», т.е. $this указывает (является ссылкой) на тот объект, в котором она находится. В результате строку 5 для $a можно прочитать как «присвоить свойству digitобъекта $a значение аргумента $dig», строку 8 - «возвратить значение свойства digit объекта $a». Для $b переменная $this автоматически примет соответствующее значение.
Правила использования $this
- Так как $this является ссылкой на вызываемый объект, данной переменной нельзя присваивать никакие значения.