В предыдущих статьях мы видели, как мы можем получить доступ к методам внутри объекта с помощью оператора объекта. Это делается при создании экземпляра объекта. Мы уже создали объект Car и получили доступ к методу drive(). Вы сделали это с оператором объекта -› после создания экземпляра объекта: $lamborghini-›drive();



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

Если бы вы считали себя объектом и хотели получить доступ к себе, вы бы использовали местоимение I. Если объект хочет получить доступ к себе, он использует $this.

Достаточно объяснений; давайте посмотрим на пример. Классы «Собака» и «Автомобиль» просто служат для объяснения основных понятий, поэтому мы будем придерживаться их.

Приведенный выше код — это тот же самый код, который мы закончили в предыдущей статье.

Если мы являемся объектом и пытаемся сослаться на самих себя, я могу спросить себя, какого цвета мои глаза? У объекта выше есть свойство $eye_color, и так получилось, что он коричневый. Давайте создадим метод с именем get_eye_color(), который возвращает значение свойства $eye_color.

Метод get_eye_color() возвращает цвет глаз объекта. Мы смогли получить доступ к свойству $eye_color, добавив $this-› к свойству $eye_color внутри метода. Чтобы проверить это, мы создаем экземпляр объекта и вызываем метод get_eye_color().

Вы можете спросить себя, почему мы просто не обратились к свойству $eye_color напрямую. Модификаторы видимости будут обсуждаться в следующей статье, где ответ на этот вопрос станет очевидным. Обычно не рекомендуется оставлять все ваши свойства общедоступными. Вы хотите использовать методы всякий раз, когда вы получаете доступ к свойствам объекта или изменяете их. Давайте взглянем на другой пример, который может помочь вам лучше представить это.

У нас есть свойство с именем $does_shed; в настоящее время установлено значение true. Для удобства пользователей мы не хотим отвечать true, когда кто-то спрашивает нас, линяет ли собака. Мы хотим ответить либо да, либо нет.

Чтобы проиллюстрировать это, давайте создадим метод с именем does_shed(). Когда мы его вызываем, мы просто хотим, чтобы метод возвращал либо да, либо нет. С помощью тернарного оператора мы можем вернуть правильное значение. Мы снова обращаемся к свойству $does_shed внутри метода does_shed() с использованием ключевого слова $this.

Когда мы позже зададим вопрос: «Линит ли немецкая овчарка?» наш ответ просто Да.

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

Еще один пример должен помочь укрепить концепцию, хотя я думаю, что вы ее уже поняли. Пришло время снова поговорить об автомобилях.

Первое, что меня беспокоит, это параметр $is_car_on в методе drive(). Мы хотим, чтобы машина могла сказать нам, включена ли она, а не чтобы мы говорили машине, что она включена. Первый шаг — сделать этот параметр свойством. Затем мы можем проверить, включена ли машина, и если да, вернуть «Я за рулем», в противном случае «Ты должен меня завести».

У нас также есть два метода, turnOn() и turnOff(), которые можно использовать для включения и выключения автомобиля или изменения $car_on свойство с true на false и наоборот. Мы также хотим проверить и убедиться, что машина еще не включена, когда мы пытаемся ее включить, и аналогичным образом мы хотим проверить, выключена ли машина, что мы не пытаемся снова ее выключить.

В этой статье мы вызывали различные свойства, но мы также можем вызывать другие методы внутри объекта, используя ключевое слово $this. Вместо того, чтобы говорить «Машина уже включена», давайте будем использовать марку и модель автомобиля. Хотя мы могли бы просто вызывать свойства из метода, давайте создадим вспомогательный метод get_make_and_model(), который возвращает нам отформатированную строку.

Затем мы можем обновить наши методы turnOn() и turnOff(), чтобы использовать метод get_make_and_model() и заменить общую строку «автомобиль» на фактическая марка и модель объекта.

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

Вывод выше должен быть довольно забавным. Вам напомнят, что вам нужно завести машину, прежде чем вы сможете управлять ею. Вот и все для $this. Это концепция, которая на самом деле довольно проста, но к ней подходят так, как будто это сложно. Как только вы освоитесь, вы быстро поймете, что не о чем беспокоиться.



Дино Кайич в настоящее время является руководителем отдела информационных технологий в компаниях LSBio (LifeSpan BioSciences, Inc.), Absolute Antibody, Kerafast, Everest BioTech, Nordic MUbio и Exalpha. Он также является генеральным директором MyAutoSystem. Он имеет более чем десятилетний опыт разработки программного обеспечения. У него есть B.S. в области компьютерных наук и несовершеннолетнего в области биологии. Его опыт включает в себя создание приложений для электронной коммерции на уровне предприятия, разработку программного обеспечения на основе исследований и содействие распространению знаний посредством письма.

Вы можете связаться с ним в LinkedIn, подписаться на него в Instagram или подписаться на его публикацию в Medium.

Прочитайте все истории Дино Каджика (и тысяч других авторов на Medium). Ваш членский взнос напрямую поддерживает Дино Кайича и других писателей, которых вы читаете. Вы также получите полный доступ ко всем историям на Medium.