Что значит this в php

от admin

Ключевое слово $this в php

В PHP ключевое слово $this ссылается на текущий объект класса. Ключевое слово $this позволяет получить доступ к свойствам и методам текущего объекта внутри класса с помощью оператора объекта (->):

Ключевое слово $this доступно только внутри класса. Его не существует вне класса. Если вы попытаетесь использовать $this вне класса, вы получите сообщение об ошибке.

Когда Вы обращаетесь к свойству объекта с помощью ключевого слова $this, вы используете $ только с ключевым словом this. И вы не используете $ с именем свойства. Например:

Ниже показан класс BankAccount:

В этом примере мы получаем доступ к свойству balance с помощью ключевого слова $this внутри методов deposit() и takew().

Методы связывания

Для начала создим новый объект BankAccount:

Далее трижды вызовите метод deposit (), чтобы внести разные суммы денег:

Этот код довольно подробный. Было бы более кратко и выразительно, если бы вы могли написать эти утверждения, используя один оператор, подобный этому:

Этот способ называется объединением методов. Чтобы сформировать цепочку методов, метод deposit() должен вернуть объект BankAccount, который является $this внутри класса BankAccount следующим образом:

Метод deposit () возвращает $this, который является текущим объектом класса BankAccount. Следовательно, вы можете вызвать любой общедоступный метод класса BankAccount.

В следующем примере сначала вызывается метод deposit(), а затем метод remove() в одной инструкции:

Объектно-ориентированное программирование

При создании программы на PHP и отдельных ее блоков нам вполне может хватить той функциональности, которую представляют функции. Однако PHP имеет и другие возможности по созданию программ, которые представляет объектно-ориентированное программирование. В ряде случаев программы, использующие ООП, проще в понимании, их легче поддерживать и изменять.

Ключевыми понятиями парадигмы ООП являются понятия «класс» и «объект». Описанием объекта является класс, а объект представляет экземпляр этого класса. Можно провести следующую аналогию: например, у каждого человека есть имя, определенный возраст, вес, какие-то другие параметры. То есть некоторый шаблон, который содержит набор параметров человека — этот шаблон можно назвать классом. А реально же существующий человек с конкретным именем, возрастом, весом и т.д. является объектом или экземпляром этого класса.

Для создания класса в PHP используется ключевое слово class , после которого идет название класса и фигурные скобки <> — блок кода класса. Например, новый класс, представляющий пользователя:

Чтобы создать объект класса Person, применяется ключевое слово new :

В данном случае переменная $person является объектом класса Person . С помощью функции print_r() можно вывести содержимое объекта, как и в случае с массивами.

При этом неважно, определяется класс до или после создания объекта. Например, мы можем сначала определить переменную класса, а потом определить этот класс:

Свойства и методы

Класс может содержать переменные, которые описывают какие-то признаки объекта, его состояние и которые еще назывют свойствами или атрибутам. И также класс класс может содержать функции, которые еще назвают методами и которые определяют его поведение.

Так, добавим в класс Person несколько свойств и методов:

Здесь класс Person содержит два свойства: $name и $age . Свойства объявляются как обычные переменные, перед которыми стоит модификатор доступа — в данном случае модификатор public .

Методы представляют обычные функции, которые выполняют определенные действия. Здесь функция hello() просто выводит приветствие.

После создания объекта класса Person:

Мы можем через имя переменной класса обращаться к его свойствам и методам. Чтобы обратиться к свойствам и методам объекта применяется оператор доступа -> . Например, установить значения свойств:

Или получить значение (например, присвоить его переменной):

Или вызвать методы объекта:

В итоге мы получим следующий вывод браузера:

При этом свойствам можно задать в классе некоторые начальные значения:

Ключевое слово this

Для обращения к свойствам и методам объекта внутри его класса применяется ключевое слово this . Например, определим в классе метод для вывода информации об объекте:

Для обращения к полям и методам внутри класса также применяется оператор доступа -> , перед которым идет $this . Причем это $this указывает именно на текущий объект. Что это значит в практическом плане? Например:

$this фактически будет указывать на переменную $tom . Тогда как при вызове

$this будет указывать на переменную $bob .

Сравнение объектов

При сравнении объектов классов следует принимать во внимание ряд особенностей. В частности, при использовании оператора равенства == два объекта считаются равными, если они представляют один и тот же класс и их свойства имеют одинаковые значения.

А при использовании оператора эквивалентности === оба объекта считаются равными, если обе переменных классах указывают на один и тот же экземпляр класса.

Рассмотрим на примере:

Здесь сравниваются две переменных — $tom и $tomas. Они представляют один и тот же класс Person, и их свойства имеют одни и те же значения. Однако они представляют разные объекты. Поэтому при сравнении оператор == возвратит true , а оператор === — false :

Возьмем другой пример, когда обе переменных представляют один и тот же объект:

Здесь объект класса Person создается только один раз: $person = new Person(); . И затем обе переменных $tom и $tomas будут указывать на этот объект. При этом не имеет значения, для какой именно переменной мы устанавливаем свойства. Так как в реальности это будет один и тот же объект. В итоге и оператор == , и оператор === при сравнении возвратят true

Обращение к методам класса через $this

Через $this можно обращаться не только к свойствам объекта, но и к его методам. Посмотрим на примере. Пусть у нас есть класс User , а в нем метод setAge для изменения возраста юзера:

Давайте добавим проверку введенного возраста: если он от 18 до 60 , то будем менять возраст на новый, а если нет — то менять не будем:

Пусть также нам нужен метод addAge , который будет добавлять некоторое количество лет к текущему возрасту:

Читать:
Wireless controller x3 как подключить

В метод addAge , конечно же, также необходимо добавить проверку возраста, сделаем это:

Получится, что ограничения на возраст теперь задаются в двух местах (в методе setAge и в методе addAge ), что не очень хорошо: если мы захотим поменять ограничение, нам придется сделать это в двух местах — это неудобно, и в каком-то из мест мы можем забыть внести изменения — это опасно, ведь наш код получится с трудноуловимой ошибкой.

Давайте вынесем проверку возраста на корректность в отдельный вспомогательный метод isAgeCorrect , в который параметром будет передаваться возраст для проверки, и используем его внутри методов setAge и addAge :

Теперь любое изменения в условиях проверки можно будет легко сделать в одном месте. Проверим, что все работает как надо:

Не подсматривая в мой код создайте такой же класс User с такими же методами.

Создайте объект этого класса User проверьте работу методов setAge и addAge .

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

Классы и объекты в PHP

Класс — это шаблон для объектов, а объект — это экземпляр класса.

Представьте, что у нас есть класс Car . Car может иметь такие свойства, как название, цвет, диски и т.д. Мы можем определить переменные класса например, $name , $color и $disk для хранения значений этих свойств.

Если мы создадим отдельные объекты (BMW, Mercedes Benz и т.д.), то они будут наследовать все свойства и поведение класса Car , но каждый объект будет иметь разные значения свойств.

Что такое класс PHP?

Класс определяется с помощью ключевого слова class , за которым следует имя класса и пара фигурных скобок (<>). Все его свойства и методы заключены в фигурные скобки:

Синтаксис

Ключевое слово class используется для определения класса в PHP. Ниже приведены правила создания класса в PHP:

  • Пишем название класса с большой буквы.
  • Если имя класса содержит более одного слова, мы пишем каждое слово с большой буквы. Это известный стиль верблюда. Например, JapaneseCars, AmericanIdol, EuropeTour и др.
  • Имя класса не может быть зарезервированным словом PHP.
  • Имя класса не может содержать пробелов.

Как добавить свойства к классу?

Мы вызываем свойства внутри класса. Свойства могут принимать такие значения, как строки, целые числа и логические значения (true/false), как и любые другие переменные. Добавим несколько свойств в класс Car:

Приведем правила создания свойств к классу:

  • Мы используем ключевое слово public перед свойством класса.
  • Согласно соглашению об именах, имя свойства начинается со строчной буквы.
  • Если имя содержит более одного слова, все слова, кроме первого слова, начинаются с заглавной буквы. Например, $color или $hasSunRoof (Верблюжий регистр camelCase).
  • Свойство может иметь значение по умолчанию. Например, $color = ‘green’.
  • Мы также можем создать свойство без значения по умолчанию. Например, $name.

Объявим класс с именем Car , который будет состоять из двух свойств ( $name и $color ) и двух методов set_name() и get_name() для установки и получения свойства $name :

Пример

Данный код ничего не выведет, поскольку мы создали класс, но не создали пока ни одного объекта.

Примечание: В классе переменные называются свойствами, а функции — методами!

Что такое объект PHP?

Объект — это экземпляр класса. Из класса мы можем создать столько объектов, сколько может понадобиться для проекта. Каждый объект имеет все свойства и методы, определенные в классе, но у них будут разные значения свойств.

Для объявления объекта необходимо использовать ключевое слово new .

Далее создадим из класса Car два объекта — $bmw и $mercedes .

Процесс создания объекта также известен как создание экземпляра.

Объекты, для чего они нужны?

В то время как в процедурном стиле программирования все функции и переменные находятся вместе в глобальной области видимости таким образом, чтобы их можно было использовать, просто вызывая их имя, использование классов делает манипуляции с кодом внутри классов скрытыми от глобальной области. Это происходит потому, что код внутри классов инкапсулируется в пределах класса, вне досягаемости глобальной области. Итак, нам нужен способ, позволяющий коду из глобальной области видимости использовать код внутри класса, и этот способ базируется на создании объектов из класса.

Мы можем создать столько объектов, сколько захотим, из одного и того же класса, и все они будут совместно использовать методы и свойства класса. См. изображение ниже:

Из одного и того же класса Car мы создали три отдельных объекта с названиями: Mercedes , Bmw и Audi .

Хотя все объекты были созданы из одного и того же класса и, следовательно, имеют методы и свойства класса, они все же разные. Это не только потому, что они имеют разные названия, но и потому, что их свойствам могут быть присвоены разные значения. Например, на изображении выше они различаются свойством цвета: Mercedes зеленый, Bmw синий, а Audi оранжевый.

Примечание: Класс содержит методы и свойства, общие для всех созданных из него объектов.

Хотя объекты используют один и тот же код, они могут вести себя по-разному, поскольку им могут быть присвоены разные значения.

Как получить свойства объекта?

Создав объект, мы можем получить его свойства. Например:

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

Обратите внимание, что имя свойства не начинается со знака $ ; только имя объекта начинается с символа $ .

Пример

Результат выполнения кода:

Свойство color было установлено в классе по умолчанию (green), поэтому все объекты его унаследовали.

Как установить свойства объекту?

Чтобы установить свойство объектe, мы используем аналогичный подход.

Например, установим синий цвет объекту bmw :

Таким же способом установим значение свойства $name для обоих объектов:

Установив значение свойства, мы можем получить его значение. Чтобы получить цвет объекта $bmw , мы используем следующую строку кода:

Похожие статьи