- Работа со свойствами объектов на PHP
- Классы и объекты в PHP
- Что такое класс PHP?
- Синтаксис
- Как добавить свойства к классу?
- Пример
- Что такое объект PHP?
- Объекты, для чего они нужны?
- Как получить свойства объекта?
- Пример
- Как установить свойства объекту?
- Пример
- Как добавить методы в класс?
- Пример
- Пример
- Пример
- Ключевое слово $this в PHP
- Пример
- Пример
- Пример
- Является ли объект экземпляром класса?
- Пример
- Итоги
Работа со свойствами объектов на PHP
Сейчас мы с вами научимся работать с объектами и их свойствами на более практическом примере. Давайте сделаем класс User , который будет описывать юзера нашего сайта. Пусть у нашего пользователя будет два свойства: имя и возраст. Напишем код нашего класса:
Пока наш класс ничего не делает — он просто описывает, что будут иметь объекты этого класса (в нашем случае каждый объект будет иметь имя и возраст). По сути, пока мы не создадим хотя бы один объект нашего класса — ничего полезного не произойдет.
Давайте создадим объект нашего класса. При этом нужно иметь ввиду, что классы принято называть большими буквами, а объекты этих классов — маленькими:
Давайте теперь что-нибудь запишем в свойства нашего объекта, а потом выведем эти данные на экран:
$user = new User; // создаем объект нашего класса $user->name = ‘john’; // записываем имя в свойство name $user->age = 25; // записываем возраст в свойство age echo $user->name; // выводим записанное имя echo $user->age; // выводим записанный возраст ?>?php>
Как вы уже поняли — в свойства объекта можно что-то записывать и из свойств можно выводить их содержимое. Давайте теперь сделаем 2 объекта-юзера: ‘john’ и ‘eric’ , заполним их данными и выведем на экран сумму их возрастов:
// Первый объект $user1 = new User; // создаем первый объект $user1->name = ‘john’; // записываем имя $user1->age = 25; // записываем возраст // Второй объект $user2 = new User; // создаем второй объект $user2->name = ‘eric’; // записываем имя $user2->age = 30; // записываем возраст // Найдем сумму возрастов: echo $user1->age + $user2->age; // выведет 55 ?>?php>
Сделайте класс Employee (работник), в котором будут следующие свойства — name (имя), age (возраст), salary (зарплата).
Создайте объект класса Employee , затем установите его свойства в следующие значения — имя ‘john’ , возраст 25 , зарплата 1000 .
Создайте второй объект класса Employee , установите его свойства в следующие значения — имя ‘eric’ , возраст 26 , зарплата 2000 .
Выведите на экран сумму зарплат созданных юзеров.
Выведите на экран сумму возрастов созданных юзеров.
Классы и объекты в PHP
Класс — это шаблон для объектов, а объект — это экземпляр класса.
Представьте, что у нас есть класс Car . Car может иметь такие свойства, как название, цвет, диски и т.д. Мы можем определить переменные класса например, $name , $color и $disk для хранения значений этих свойств.
Если мы создадим отдельные объекты (BMW, Mercedes Benz и т.д.), то они будут наследовать все свойства и поведение класса Car , но каждый объект будет иметь разные значения свойств.
Что такое класс PHP?
Класс определяется с помощью ключевого слова class , за которым следует имя класса и пара фигурных скобок (<>). Все его свойства и методы заключены в фигурные скобки:
Синтаксис
Ключевое слово class используется для определения класса в PHP. Ниже приведены правила создания класса в PHP:
- Пишем название класса с большой буквы.
- Если имя класса содержит более одного слова, мы пишем каждое слово с большой буквы. Это известный стиль верблюда. Например, JapaneseCars, AmericanIdol, EuropeTour и др.
- Имя класса не может быть зарезервированным словом PHP.
- Имя класса не может содержать пробелов.
Как добавить свойства к классу?
Мы вызываем свойства внутри класса. Свойства могут принимать такие значения, как строки, целые числа и логические значения (true/false), как и любые другие переменные. Добавим несколько свойств в класс Car:
class Car < public $name; public $color = 'green'; public $hasSunRoof = true; >
Приведем правила создания свойств к классу:
- Мы используем ключевое слово public перед свойством класса.
- Согласно соглашению об именах, имя свойства начинается со строчной буквы.
- Если имя содержит более одного слова, все слова, кроме первого слова, начинаются с заглавной буквы. Например, $color или $hasSunRoof (Верблюжий регистр camelCase).
- Свойство может иметь значение по умолчанию. Например, $color = ‘green’.
- Мы также можем создать свойство без значения по умолчанию. Например, $name.
Объявим класс с именем Car , который будет состоять из двух свойств ( $name и $color ) и двух методов set_name() и get_name() для установки и получения свойства $name :
Пример
name = $name; > function get_name() < return $this->name; > > ?>
Данный код ничего не выведет, поскольку мы создали класс, но не создали пока ни одного объекта.
Примечание: В классе переменные называются свойствами, а функции — методами!
Что такое объект PHP?
Объект — это экземпляр класса. Из класса мы можем создать столько объектов, сколько может понадобиться для проекта. Каждый объект имеет все свойства и методы, определенные в классе, но у них будут разные значения свойств.
Для объявления объекта необходимо использовать ключевое слово new .
Далее создадим из класса Car два объекта — $bmw и $mercedes .
$bmw = new Car(); $mercedes = new Car();
Процесс создания объекта также известен как создание экземпляра.
Объекты, для чего они нужны?
В то время как в процедурном стиле программирования все функции и переменные находятся вместе в глобальной области видимости таким образом, чтобы их можно было использовать, просто вызывая их имя, использование классов делает манипуляции с кодом внутри классов скрытыми от глобальной области. Это происходит потому, что код внутри классов инкапсулируется в пределах класса, вне досягаемости глобальной области. Итак, нам нужен способ, позволяющий коду из глобальной области видимости использовать код внутри класса, и этот способ базируется на создании объектов из класса.
Мы можем создать столько объектов, сколько захотим, из одного и того же класса, и все они будут совместно использовать методы и свойства класса. См. изображение ниже:
Из одного и того же класса Car мы создали три отдельных объекта с названиями: Mercedes , Bmw и Audi .
Хотя все объекты были созданы из одного и того же класса и, следовательно, имеют методы и свойства класса, они все же разные. Это не только потому, что они имеют разные названия, но и потому, что их свойствам могут быть присвоены разные значения. Например, на изображении выше они различаются свойством цвета: Mercedes зеленый, Bmw синий, а Audi оранжевый.
Примечание: Класс содержит методы и свойства, общие для всех созданных из него объектов.
Хотя объекты используют один и тот же код, они могут вести себя по-разному, поскольку им могут быть присвоены разные значения.
Как получить свойства объекта?
Создав объект, мы можем получить его свойства. Например:
echo $bmw -> color; echo $mercedes -> color;
Когда объект создан, мы можем получить доступ к свойствам класса с помощью оператора (->) .
Обратите внимание, что имя свойства не начинается со знака $ ; только имя объекта начинается с символа $ .
Пример
// создадим из класса Car два объекта $bmw = new Car(); $mercedes = new Car(); echo $bmw -> color; echo "
"; echo $mercedes -> color; ?>
Результат выполнения кода:
Свойство color было установлено в классе по умолчанию (green), поэтому все объекты его унаследовали.
Как установить свойства объекту?
Чтобы установить свойство объектe, мы используем аналогичный подход.
Например, установим синий цвет объекту bmw :
Таким же способом установим значение свойства $name для обоих объектов:
$bmw ->name = "BMW"; $mercedes ->name = "Mercedes Benz";
Установив значение свойства, мы можем получить его значение. Чтобы получить цвет объекта $bmw , мы используем следующую строку кода:
Пример
$bmw = new Car(); $bmw ->name = "BMW"; $bmw -> color = 'blue'; $mercedes = new Car(); $mercedes ->name = "Mercedes Benz"; echo $bmw -> name . ": "; echo $bmw -> color; echo "
"; echo $mercedes -> name . ": "; echo $mercedes -> color; ?>
Результат выполнения кода:
Как добавить методы в класс?
Классы могут содержать различные функции. Функция внутри класса называется методом. Здесь мы добавляем в класс метод hello() с префиксом public :
class Car < public $comp; public $color = 'green'; public $hasSunRoof = true; public function hello() return "beep"; > >
- Прописываем ключевое слово public перед методом.
- Согласно соглашению об именах, имя метода начинается со строчной буквы.
- Если имя содержит более одного слова, то все слова, кроме первого слова, начинаются с заглавной буквы. Например, helloUser() или flyPanAm().
Мы можем подходить к методам так же, как и к свойствам:
Пример
> // Создать экземпляр $bmw = new Car (); $mercedes = new Car (); // Получить значения echo $bmw -> color; // green echo "
"; echo $mercedes -> color; // green echo "
"; // Установите значения $bmw -> color = 'blue'; $bmw -> name = "BMW"; $mercedes -> name = "Mercedes Benz"; // Получить значения echo $bmw -> color; // blue echo "
"; echo $mercedes -> color; // green echo "
"; echo $bmw -> name; // BMW echo "
"; echo $mercedes -> name; // Mercedes Benz echo "
"; // Используем метод, чтобы получить звуковой сигнал echo $bmw -> hello(); // beep echo "
"; echo $mercedes -> hello(); // beep ?>
В приведенном ниже примере создадим два метода set_name() и get_name() для установки и получения свойства $name для объектов $bmw и $mercedes :
Пример
name = $name; > function get_name() < return $this->name; > > $bmw = new Car(); $mercedes = new Car(); $bmw->set_name("BMW"); $mercedes->set_name("Mercedes Benz"); echo $bmw->get_name(); echo "
"; echo $mercedes->get_name(); ?>
Результат выполнения кода:
Для установки и получения свойства $color , созданных объектов, добавляем в класс Car еще два метода:
Пример
name = $name; > function get_name() < return $this->name; > function set_color($color) < $this->color = $color; > function get_color() < return $this->color; > > $bmw = new Car(); $bmw->set_name("BMW"); $bmw->set_color('blue'); echo "Название: " . $bmw->get_name(); echo "
"; echo "Цвет: " . $bmw->get_color(); ?>
Результат выполнения кода:
Ключевое слово $this в PHP
Ключевое слово $this указывает на то, что мы используем собственные методы и свойства класса, и позволяет нам получить доступ к ним в пределах области видимости класса.
Ключевое слово $this позволяет нам получить доступ к свойствам и методам класса внутри класса, используя следующий синтаксис:
$this -> propertyName; $this -> methodName();
Примечание: Только ключевое слово $this начинается со знака $ , а имена свойств и методов нет.
Ключевое слово $this относится к текущему объекту и доступно только внутри методов.
В следующем примере создан класс Car и объект $bmw.
Пример
Перед нами стоит задача изменить свойство $name объекта.
Сделать это можно двумя способами:
1. Изменение свойства внутри класса путём добавления метода set_name() и используя ключевое слово $this :
Пример
name = $name; > > $bmw = new Car(); $bmw->set_name("BMW"); echo $bmw -> name; // BMW ?>
Результат выполнения кода:
2-й способ — это изменение свойства вне класса путем прямого изменения значения $name:
Пример
$bmw = new Car(); $bmw->name = "BMW"; echo $bmw -> name; // BMW ?>
Результат выполнения кода:
Является ли объект экземпляром класса?
Оператор instanceof используется для определения того, является ли текущий объект экземпляром указанного класса:
Пример
Результат выполнения кода:
Оператор instanceof не генерирует никаких ошибок, если проверяемая переменная не является объектом. В этом случае он просто возвращает FALSE .
Итоги
В этом уроке вы сделали свои первые шаги в мир объектно-ориентированного программирования PHP, узнав о классах и об объектах, которые могут быть созданы из них. Кликните здесь, чтобы попрактиковаться в предмете. Сегодня вы также узнали, как использовать ключевое слово $this для получения собственных свойств и методов класса изнутри класса. Закрепите полученные знания о ключевике $this.