Уроки курса
1 Основы синтаксиса PHP 8
60 мин
2 Функции и управляющие конструкции
60 мин
3 Объектно-ориентированное программирование на PHP
60 мин
4 Наследование, интерфейсы и полиморфизм
60 мин
5 Основы баз данных MySQL и работа через PDO
60 мин
6 Архитектурный паттерн MVC
60 мин
7 Введение в Laravel и настройка окружения
60 мин
8 Маршрутизация и контроллеры в Laravel
60 мин
9 Шаблонизатор Blade и создание интерфейса
60 мин
10 Миграции баз данных и Eloquent ORM
60 мин
11 Связи моделей в Eloquent — Настройка связей 'один …
60 мин
12 Аутентификация и защита маршрутов
60 мин
13 Разработка каталога товаров и категорий
60 мин
14 Реализация корзины покупок через сессии
60 мин
15 Оформление заказа и транзакции базы данных
60 мин
16 Интеграция платежной системы Stripe
60 мин
17 Интеграция платежной системы Vipps
60 мин
18 Разработка панели администратора
60 мин
19 Оптимизация и подготовка к production
60 мин
20 Деплой Laravel-приложения на сервер
60 мин
21 Основы PHP 8: Синтаксис, переменные и управляющие конструкции
60 мин
22 Функции и массивы в PHP 8
60 мин
23 Объектно-ориентированное программирование: Классы и объекты
60 мин
24 Продвинутое ООП: Наследование, интерфейсы и полиморфизм
60 мин
25 Основы баз данных: Проектирование БД и работа с …
60 мин
26 Взаимодействие PHP с MySQL через PDO
60 мин
27 Архитектура MVC и введение в фреймворк Laravel
60 мин
28 Маршрутизация и контроллеры в Laravel
60 мин
29 Шаблонизатор Blade: Создание пользовательского интерфейса
60 мин
30 Миграции и Eloquent ORM: Создание таблиц товаров
60 мин
31 Связи в Eloquent ORM: Отношения между моделями
60 мин
32 Аутентификация и авторизация пользователей
60 мин
33 Разработка каталога товаров: Вывод, фильтрация и пагинация
60 мин
34 Реализация корзины покупок с использованием сессий
60 мин
35 Оформление заказа: Работа с формами и валидация
60 мин
36 Транзакции базы данных: Сохранение заказа
60 мин
37 Интеграция платежной системы Stripe
60 мин
38 Интеграция платежной системы Vipps
60 мин
39 Создание панели администратора
60 мин
40 Подготовка к production и деплой приложения
60 мин
41 Основы PHP 8 и синтаксис
60 мин
42 Объектно-ориентированное программирование на PHP
60 мин
43 Продвинутое ООП и интерфейсы
60 мин
44 Основы баз данных и MySQL
60 мин
45 Архитектурный паттерн MVC
60 мин
46 Введение в Laravel и маршрутизация
60 мин
47 Шаблонизатор Blade и верстка интерфейса
60 мин
48 Миграции и структура базы данных
60 мин
49 Eloquent ORM и модели
60 мин
50 Отношения в Eloquent ORM
60 мин
51 Авторизация и защита маршрутов
60 мин
52 Создание каталога товаров
60 мин
53 Реализация корзины покупок
60 мин
54 Оформление заказа и транзакции БД
60 мин
55 Интеграция платежной системы Stripe
60 мин
56 Интеграция платежной системы Vipps
60 мин
57 Панель администратора: управление товарами
60 мин
58 Панель администратора: управление заказами
60 мин
59 Подготовка к production и деплой
60 мин
60 Запуск и тестирование готового интернет-магазина
60 мин

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

Освоение классов, объектов, свойств и методов, а также продвинутого объявления свойств в конструкторе (Constructor Property Promotion).

Прогресс урока: 0%

Основы ООП: Классы и Объекты

Для создания сложных систем, таких как интернет-магазин, процедурного подхода (просто функций и переменных) недостаточно. Здесь на помощь приходит Объектно-Ориентированное Программирование (ООП). Мы будем использовать метод Scaffolding (Скаффолдинг): начнем с базовой концепции класса, а затем постепенно усложним её, добавив современные фичи PHP 8.

Класс — это чертеж или шаблон. Например, чертеж товара. Объект — это конкретный экземпляр этого чертежа (например, конкретный ноутбук или телефон). Классы состоят из свойств (переменных, хранящих состояние объекта) и методов (функций, определяющих поведение объекта).

В ООП существует понятие инкапсуляции — сокрытия внутреннего состояния объекта от прямого изменения извне. Для этого используются модификаторы доступа:

  • public — свойство или метод доступны отовсюду.
  • protected — доступны внутри самого класса и его наследников.
  • private — доступны только внутри самого класса.

При создании объекта вызывается специальный магический метод — конструктор (__construct). В старых версиях PHP программистам приходилось писать много шаблонного кода: объявлять свойства, передавать их в конструктор и затем присваивать значения. PHP 8 элегантно решил эту проблему.

Синтаксис PHP 7 (Старый подход) Синтаксис PHP 8 (Constructor Property Promotion)
class Product { public int $id; public function __construct(int $id) { $this->id = $id; } } class Product { public function __construct( public int $id ) {} }

Constructor Property Promotion в действии

Как видно из таблицы, Constructor Property Promotion позволяет объединить объявление свойства и его инициализацию прямо в параметрах конструктора. Это значительно сокращает объем кода и делает его более читаемым.

Давайте реализуем базовый класс Product для нашего интернет-магазина. Этот класс будет представлять товар в корзине. Мы типизируем свойства: id будет целым числом (int), name — строкой (string), а price — числом с плавающей точкой (float). Также мы добавим метод для форматирования цены, чтобы выводить её в интерфейсе с символом доллара и двумя знаками после запятой.

Обратите внимание на типизацию возвращаемого значения метода getFormattedPrice(): string. Это гарантирует, что метод всегда вернет строку, и защищает нас от ошибок при выводе данных в HTML-шаблоне.

php
<?php
// Практика: Класс Product (Архивный вариант 1, Упражнение 1.1)
class Product {
    // Использование Constructor Property Promotion (PHP 8)
    public function __construct(
        public int $id,
        public string $name,
        public float $price
    ) {}

    // Метод для получения отформатированной цены
    public function getFormattedPrice(): string {
        // number_format форматирует число с группировкой тысяч и знаками после запятой
        return '$' . number_format($this->price, 2);
    }
}

// Создание экземпляра (объекта) класса Product
$laptop = new Product(1, 'Apple MacBook Pro', 1999.99);
$mouse = new Product(2, 'Logitech Wireless Mouse', 25.50);

// Использование методов объекта
echo $laptop->name . " стоит " . $laptop->getFormattedPrice() . "<br>";
echo $mouse->name . " стоит " . $mouse->getFormattedPrice();
?>

Какую проблему решает Constructor Property Promotion в PHP 8?

Создание класса с продвинутым конструктором

Представьте, что вы разрабатываете модуль пользователей. Вам нужно создать класс User.

  • Создайте класс User.
  • Используя Constructor Property Promotion (PHP 8), добавьте в конструктор три public свойства: int $id, string $email, bool $isActive.
  • Добавьте метод getStatus(): string, который возвращает 'Активен', если $isActive равен true, и 'Заблокирован', если false.
10 баллов