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

Мы переходим к самой важной парадигме современной разработки — Объектно-Ориентированному Программированию (ООП). Используя метод Mastery Learning, мы не двинемся дальше, пока вы не поймете разницу между классом и объектом. Представьте, что Класс — это чертеж автомобиля. На чертеже указано, что у машины есть цвет, двигатель и колеса. Но на чертеже нельзя ездить. Объект (или экземпляр) — это реальный автомобиль, сошедший с конвейера по этому чертежу: красная машина с мотором 2.0. В нашем интернет-магазине классом будет Product (Товар), а объектом — конкретный "iPhone 15" за $999. Классы содержат свойства (переменные внутри класса) и методы (функции внутри класса). До PHP 8 объявление свойств и их инициализация в конструкторе занимали много места. PHP 8 ввел Constructor Property Promotion — синтаксический сахар, позволяющий объявить свойства прямо в аргументах конструктора.

php
<?php
// Реализация класса Product с использованием Constructor Property Promotion (PHP 8)
class Product {
    // Свойства объявляются и инициализируются прямо в конструкторе
    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, 'MacBook Pro', 1999.99);
echo $laptop->name . " стоит " . $laptop->getFormattedPrice();
?>

Обратите внимание на ключевое слово $this. Оно используется внутри методов класса для обращения к свойствам именно текущего объекта. Если вы создадите два объекта: $laptop и $mouse, вызов $laptop->getFormattedPrice() возьмет цену ноутбука, потому что $this в тот момент указывает на объект ноутбука. Также мы использовали модификатор доступа public. Это значит, что свойства и методы доступны из любой части программы. В будущем мы изучим private (доступно только внутри класса) и protected (доступно в классе и его наследниках), что является основой принципа инкапсуляции — сокрытия внутренних деталей реализации от внешнего мира, чтобы случайно не сломать логику работы (например, не позволить напрямую изменить цену товара на отрицательную).

Задание

Сценарий: Создание корзины покупателя с использованием ООП.

  • Создать класс Cart.
  • Добавить приватное свойство $items (массив).
  • Написать публичный метод addProduct(Product $product).
  • Внутри метода добавить объект товара в массив $items через $this->items[] = $product;
10 баллов

Что позволяет сделать Constructor Property Promotion в PHP 8?

Какое ключевое слово используется для создания нового объекта (экземпляра) из класса?