Уроки курса
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 мин

Объектно-ориентированное программирование: Классы и объекты

Студент освоит базовые концепции ООП, научится создавать классы и методы, а также использовать Constructor Property Promotion для сокращения кода.

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

Парадигма ООП и определение классов

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

В ООП существуют три уровня доступа (модификаторы видимости), реализующие принцип инкапсуляции: public (доступно отовсюду), protected (доступно внутри класса и его наследников) и private (доступно только внутри самого класса). Инкапсуляция защищает данные от неконтролируемого изменения извне. В идеале свойства класса должны быть private или protected, а доступ к ним осуществляться через публичные методы (геттеры и сеттеры). Однако в современных версиях PHP, благодаря строгой типизации и readonly свойствам (PHP 8.1+), часто используются публичные свойства для простых объектов передачи данных (DTO).

Constructor Property Promotion (PHP 8)

В архивных материалах мы видим задачу на реализацию класса Product с использованием Constructor Property Promotion. До PHP 8, чтобы инициализировать свойства объекта при его создании, приходилось писать много шаблонного (boilerplate) кода: объявлять свойства, писать конструктор, принимать аргументы в конструктор и присваивать их свойствам ($this->name = $name;). PHP 8 представил 'Продвижение свойств конструктора' — синтаксический сахар, который позволяет объединить объявление свойства и его инициализацию прямо в сигнатуре конструктора.

Это кардинально сокращает объем кода и делает его более читаемым. Вы просто указываете модификатор доступа (например, public), тип и имя переменной прямо в круглых скобках функции __construct(). PHP автоматически создаст эти свойства в классе и присвоит им переданные значения. В этом же классе мы создадим метод getFormattedPrice(), демонстрирующий поведение объекта. В методах класса для обращения к свойствам текущего объекта используется псевдо-переменная $this.

php
<?php
// Реализация класса Product из архивных материалов
class Product {
    // Constructor Property Promotion (PHP 8)
    public function __construct(
        public int $id,
        public string $name,
        public float $price
    ) {}

    // Метод класса
    public function getFormattedPrice(): string {
        // Использование $this для доступа к свойству объекта
        return '$' . number_format($this->price, 2);
    }
}

// Создание экземпляра (объекта) класса
$laptop = new Product(1, 'Laptop', 1500.00);
echo $laptop->getFormattedPrice(); // Выведет: $1,500.00

Что означает псевдо-переменная $this в контексте ООП в PHP?

Какой магический метод вызывается автоматически при создании нового объекта с помощью ключевого слова new?

Задание

Применение Project-Based Learning: Создание элемента корзины.

  • Создайте класс CartItem.
  • Используя Constructor Property Promotion, добавьте публичные свойства: Product $product и int $quantity.
  • Напишите метод getTotal(), который возвращает произведение цены товара на его количество.
  • Проверьте работу, создав объект товара и передав его в CartItem.
10 баллов
Термин ООП Определение Пример
Класс Шаблон или чертеж class Order { }
Объект Конкретный экземпляр класса $order = new Order();
Инкапсуляция Сокрытие внутренней реализации private float $total;
Метод Функция, принадлежащая классу public function pay() { }