Классы и объекты в PHP
Класс — это шаблон для объектов, а объект — это экземпляр класса.
Представьте, что у нас есть класс Car
. Car
может иметь такие свойства, как название, цвет, диски и т.д. Мы можем определить переменные класса например, $name
, $color
и $disk
для хранения значений этих свойств.
Если мы создадим отдельные объекты (BMW, Mercedes Benz и т.д.), то они будут наследовать все свойства и поведение класса Car
, но каждый объект будет иметь разные значения свойств.
Что такое класс PHP?
Класс определяется с помощью ключевого слова class
, за которым следует имя класса и пара фигурных скобок ({}). Все его свойства и методы заключены в фигурные скобки:
Синтаксис
<?php class Car { // код идёт здесь...
} ?>
Ключевое слово 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
:
Пример
<?php
class Car {
// Свойства
public $name;
public $color;
// Методы
function set_name($name) {
$this->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;
Когда объект создан, мы можем получить доступ к свойствам класса с помощью оператора (->)
.
Обратите внимание, что имя свойства не начинается со знака $
; только имя объекта начинается с символа $
.
Пример
Попробуй сам »<?php
class Car { // создадим класс Car
// Свойства
public $name;
public $color = 'green';
public $hasSunRoof = true;
}
// создадим из класса Car два объекта
$bmw = new Car();
$mercedes = new Car();
echo $bmw -> color;
echo "<br>";
echo $mercedes -> color;
?>
Результат выполнения кода:
green
Свойство color
было установлено в классе по умолчанию (green), поэтому все объекты его унаследовали.
Как установить свойства объекту?
Чтобы установить свойство объектe, мы используем аналогичный подход.
Например, установим синий цвет объекту bmw
:
$bmw -> color = 'blue';
Таким же способом установим значение свойства $name
для обоих объектов:
$bmw ->name = "BMW"; $mercedes ->name = "Mercedes Benz";
Установив значение свойства, мы можем получить его значение.
Чтобы получить цвет объекта $bmw
, мы используем следующую строку кода:
echo $bmw -> color;
Пример
Попробуй сам »<?php
class Car {
// Свойства
public $name;
public $color = 'green';
public $hasSunRoof = true;
}
$bmw = new Car();
$bmw ->name = "BMW";
$bmw -> color = 'blue';
$mercedes = new Car();
$mercedes ->name = "Mercedes Benz";
echo $bmw -> name . ": ";
echo $bmw -> color;
echo "<br>";
echo $mercedes -> name . ": ";
echo $mercedes -> color;
?>
Результат выполнения кода:
Mercedes Benz: green
Как добавить методы в класс?
Классы могут содержать различные функции. Функция внутри класса называется методом. Здесь мы добавляем в класс метод hello()
с префиксом public
:
class Car { public $comp; public $color = 'green'; public $hasSunRoof = true; public function hello() { return "beep"; } }
Правила создания методов:
- Прописываем ключевое слово
public перед методом. - Согласно соглашению об именах, имя метода начинается со строчной буквы.
- Если имя содержит более одного слова, то все слова, кроме первого слова, начинаются с заглавной буквы. Например, helloUser() или flyPanAm().
Мы можем подходить к методам так же, как и к свойствам:
<?php
class Car {
// свойства
public $name;
public $color = 'green';
public $hasSunRoof = true;
// метод, который говорит привет
public function hello()
{
return "beep";
}
}
// Создать экземпляр
$bmw = new Car ();
$mercedes = new Car ();
// Получить значения
echo $bmw -> color; // green
echo "<br >";
echo $mercedes -> color; // green
echo "<hr >";
// Установите значения
$bmw -> color = 'blue';
$bmw -> name = "BMW";
$mercedes -> name = "Mercedes Benz";
// Получить значения
echo $bmw -> color; // blue
echo "<br >";
echo $mercedes -> color; // green
echo "<br >";
echo $bmw -> name; // BMW
echo "<br >";
echo $mercedes -> name; // Mercedes Benz
echo "<hr >";
// Используем метод, чтобы получить звуковой сигнал
echo $bmw -> hello(); // beep
echo "<br >";
echo $mercedes -> hello(); // beep
?>
В приведенном ниже примере создадим два метода set_name()
и get_name()
для установки и получения свойства $name
для объектов $bmw
и $mercedes
:
Пример
Попробуй сам »<?php
class Car {
// Свойства
public $name;
public $color;
// Методы
function set_name($name) {
$this->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 "<br>";
echo $mercedes->get_name();
?>
Результат выполнения кода:
Mercedes Benz
Для установки и получения свойства $color
, созданных объектов, добавляем в класс Car
еще два метода:
Пример
Попробуй сам »<?php
class Car {
// Свойства
public $name;
public $color;
// Методы
function set_name($name) {
$this->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 "<br>";
echo "Цвет: " . $bmw->get_color();
?>
Результат выполнения кода:
Цвет: blue
Ключевое слово $this в PHP
Ключевое слово $this
указывает на то, что мы используем собственные методы и свойства класса, и позволяет нам получить доступ к ним в пределах области видимости класса.
Ключевое слово $this
позволяет нам получить доступ к свойствам и методам класса внутри класса, используя следующий синтаксис:
$this -> propertyName; $this -> methodName();
Примечание: Только ключевое слово $this
начинается со знака $
, а имена свойств и методов нет.
Ключевое слово $this
относится к текущему объекту и доступно только внутри методов.
В следующем примере создан класс Car и объект $bmw.
Пример
<?php
class Car {
public $name;
}
$bmw = new Car();
?>
Перед нами стоит задача изменить свойство $name объекта.
Сделать это можно двумя способами:
1. Изменение свойства внутри класса путём добавления метода set_name()
и используя ключевое слово $this
:
Пример
Попробуй сам »<?php
class Car {
public $name;
// Метод
function set_name($name) {
$this->name = $name;
}
}
$bmw = new Car();
$bmw->set_name("BMW");
echo $bmw -> name; // BMW
?>
Результат выполнения кода:
2-й способ — это изменение свойства вне класса путем прямого изменения значения $name:
Пример
Попробуй сам »<?php
class Car {
public $name;
}
$bmw = new Car();
$bmw->name = "BMW";
echo $bmw -> name; // BMW
?>
Результат выполнения кода:
Является ли объект экземпляром класса?
Оператор instanceof
используется для определения того, является ли текущий объект экземпляром указанного класса:
Пример
Попробуй сам »<?php
$bmw = new Car();
var_dump($bmw instanceof Car);
?>
Результат выполнения кода:
Оператор instanceof
не генерирует никаких ошибок, если проверяемая переменная не является объектом. В этом случае он просто возвращает FALSE
.
Итоги
В этом уроке вы сделали свои первые шаги в мир объектно-ориентированного программирования PHP, узнав о классах и об объектах, которые могут быть созданы из них. Кликните здесь, чтобы попрактиковаться в предмете. Сегодня вы также узнали, как использовать ключевое слово $this для получения собственных свойств и методов класса изнутри класса. Закрепите полученные знания о ключевике $this.