PHP Учебник

PHP Старт Введение в PHP Установка PHP Синтаксис PHP Комментарии в PHP Переменные PHP PHP Echo / Print Типы данных PHP Строки PHP Числа PHP Математика в PHP Константы PHP Операторы PHP PHP If...Else...Elseif PHP Switch Циклы в PHP Функции PHP Массивы PHP PHP Суперглобальные PHP RegEx

PHP Формы

Обработка форм PHP Валидация форм PHP Обязательные поля Валидация URL/E-mail Полная форма PHP

PHP Продвинутый

PHP Дата и время PHP Include/Require PHP Работа с файлами Открытие/Чтение файлов Создание/Запись файлов PHP Загрузка файлов Файлы cookie PHP Сессии PHP Фильтры PHP Расширенные фильтры PHP Функция Callback PHP JSON PHP Исключения

PHP OOP

Что такое ООП в PHP Классы/Объекты PHP Цепочки методов PHP Конструктор PHP Деструктор PHP Модификаторы доступа Наследование в PHP Константы класса PHP Подсказка типов PHP Подсказка интерфейсов Абстрактные классы PHP PHP Интерфейсы PHP Полиформизм PHP Трейты Статические методы PHP Статические свойства PHP Пространства имен PHP Итерируемые объекты

База данных MySQL

База данных MySQL Подключение к MySQL Создание БД MySQL Создание таблицы MySQL Вставка данных MySQL Получить ID MySQL Подготовленные операторы PHP MySQL Получение данных MySQL Предложение WHERE Предложение ORDER BY Обновление данных MySQL Удаление данных БД MySQL Limit Data

PHP XML

Парсеры PHP XML Парсер PHP SimpleXML Получить PHP SimpleXML PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX Введение AJAX PHP AJAX База Данных AJAX XML AJAX Живой поиск AJAX Опрос

PHP Примеры

PHP Примеры Практика ООП PHP PHP квиз-тест Упражнения Базовый PHP Упражнения Алгоритмы Упражнения Массивы Упражнения Цикл for Упражнения Функции Регулярные выражения Упражнения Дата PHP Упражнения Строки PHP Математика PHP Упражнения Формы PHP Упражнения Классы PHP Упражнения JSON PHP PHP Задачник


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




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

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

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


Класс определяется с помощью ключевого слова 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;
  }
}
?>

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

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


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

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

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

$bmw = new Car();
$mercedes = new Car();

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

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

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

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

Объекты и классы в объектно-ориентированном PHP на примере автомобиля Из одного и того же класса 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
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;
?>

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

BMW: blue
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();
?>

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

BMW
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();
?>

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

Название: BMW
Цвет: blue

Ключевое слово $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
?>

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

BMW

2-й способ — это изменение свойства вне класса путем прямого изменения значения $name:

<?php
class Car {
  public $name;  
}
$bmw = new Car();
$bmw->name = "BMW";
echo $bmw -> name; // BMW
?>

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

BMW

Оператор instanceof используется для определения того, является ли текущий объект экземпляром указанного класса:

<?php
$bmw = new Car();
var_dump($bmw instanceof Car);
?>

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

bool(true)

Оператор instanceof не генерирует никаких ошибок, если проверяемая переменная не является объектом. В этом случае он просто возвращает FALSE.

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