170.41K
AI

Основы_ООП_в_PHP_классы,_объекты,_инкапсуляция

1.

Основы ООП в PHP:
Классы, Объекты, Инкапсуляция
Практический модуль ПМ.11 «Разработка, администрирование и защита баз данных» (МДК 11.02, тема 9.1.1)
Специальность 09.02.07 «Информационные системы и программирование»
Рефакторинг проекта «Электронный журнал 2.0»

2.

Проблемы процедурного кода в «Электронном журнале 2.0»
Что не так в текущем проекте?
• Дублирование PDO: Подключение к базе пишется заново в
login.php, index.php, export.php.
• Смешение логики: HTML-верстка, SQL-запросы и проверки ролей
соединены в одном файле.
• Хрупкость: Изменение структуры таблицы БД влечет правки во
множестве файлов скрипта.
Проблемный вопрос
«Как избавиться от дублирования кода, защитить данные от
случайных изменений и сделать систему легко
расширяемой?»
Ответ кроется в переходе от процедурного подхода к объектноориентированному программированию (ООП).

3.

Цель и задачи занятия
Главная цель
Практика кода
Архитектура
Сформировать понимание базовых
принципов ООП в PHP и применить их для
рефакторинга кода учебного журнала.
Создать независимые модули классов
Database и User, переписав процедурную
авторизацию на объектную.
Научиться скрывать внутреннюю реализацию
(инкапсуляция) и подготовить почву для
наследования и отчетов.

4.

Базовые понятия объектно-ориентированного программирования
Класс (Class): Шаблон или чертеж, определяющий структуру будущих сущностей (например, шаблон пользователя журнала).
Объект (Object): Экземпляр класса, созданный в памяти с конкретными данными (например, конкретный студент Иванов).
Свойства и методы: Переменные (атрибуты состояния) и функции (поведение), принадлежащие классу.
Спецификатор $this: Ссылка на текущий объект внутри методов класса для доступа к его полям.
Конструктор (__construct): Магический метод, автоматически вызываемый при создании объекта для его инициализации.

5.

Инкапсуляция и модификаторы доступа
Защита данных программы
public: Доступно отовсюду (снаружи и внутри классов).
Инкапсуляция — это объединение данных и кода в один компонент с
ограничением доступа к ним извне.
private: Доступно строго внутри самого класса.
Модификаторы доступа в PHP регулируют видимость свойств и
методов:
protected: Доступно внутри класса и его потомков (наследников).

6.

Пример класса Database
class Database { private $pdo; public function __construct() {
$dsn = "mysql:host=localhost;dbname=journal"; $this->pdo = new
Пояснения к коду
• Свойство $pdo скрыто (private) — защищено от изменений извне.
PDO($dsn, "root", ""); } public function query($sql, $params =
[]) { $stmt = $this->pdo->prepare($sql); $stmt>execute($params); return $stmt; } }
• Конструктор автоматически устанавливает единое соединение при
создании объекта базы.
• Метод query() инкапсулирует подготовку и выполнение SQL-запросов с
параметрами.

7.

Пример класса User и поиск записи
class User { public $id, $login, $role, $studentId; public static
function findByLogin($login, $db) { $sql = "SELECT * FROM users
WHERE login = ?"; $stmt = $db->query($sql, [$login]); $data = $stmt>fetch(); if (!$data) return null; $user = new self(); $user->id =
$data['id']; $user->login = $data['login']; $user->role =
$data['role']; return $user; } }
Особенности реализации
• Статический метод findByLogin: Вызывается без создания экземпляра
класса, возвращает готовый объект User.
• Используется SQL-запрос с защитой от инъекций через подготовленные
выражения объекта Database.

8.

Рефакторинг страницы login.php
Было (Процедурный спагетти-код):
Стало (Объектный подход):
// Соединение прямо в файле $pdo = new PDO(...); if ($_POST) { $stmt =
require_once 'classes/Database.php'; require_once 'classes/User.php'; if
$pdo->prepare("SELECT * FROM users..."); $stmt->execute([$_POST['login']]);
($_POST) { $db = new Database(); $user = User->findByLogin($_POST['login'],
$user = $stmt->fetch(); // Проверки, сессии, куча кода... }
$db); if ($user && password_verify(...)) { // Успешный вход в систему } }

9.

Практическое задание на паре
Алгоритм выполнения работы
Дополнительное задание (*)
1. Создать в корне проекта папаку classes/.
Создать класс Attendance для работы с таблицей посещаемости
занятий электронного журнала.
2.
Разработать файлы Database.php и User.php.
3.
Выполнить рефакторинг формы входа login.php.
4.
Проверить корректность авторизации под 3 ролями (Студент,
Преподаватель, Администратор).
Обеспечить логирование добавления пропусков через объектный метод
addRecord().

10.

Критерии оценки практической работы
Критерий оценки
Максимум баллов
Описание проверки
Создание классов Database и User
3 балла
Корректность структуры, наличие конструктора и модификаторов доступа.
Рефакторинг скрипта login.php
3 балла
Успешный отказ от дублирования кода подключения, работа через новые объекты.
Проверка авторизации (3 роли)
2 балла
Корректный перенаправление и разграничение прав доступа.
Чистота и читаемость кода
2 балла
Соблюдение стандартов PSR-12, комментарии, понятные имена свойств.

11.

Домашнее задание
Обязательная часть
Опережающее задание
• Доработать и отладить созданные классы Database и User.
Продумать структуру будущего класса Report для генерации отчетов
посещаемости.
• Перевести еще одну страницу электронного журнала (например,
профиль или список оценок) на использование ООП.
Подумать, какие свойства и методы ему понадобятся на следующей паре.

12.

Связь со следующей парой
Анонс темы № 9.1.2
Развитие проекта
На следующем занятии мы разберем продвинутые возможности ООП:
«Электронный журнал 2.0» становится масштабируемым
программным продуктом промышленного уровня.
• Наследование классов (extends)
• Обработка ошибок через исключения (try/catch)
• Проектирование специализированного класса отчетов Report

13.

Итоги и рефлексия занятия
Вопросы для закрепления
Дискуссия
• Что такое инкапсуляция и какую задачу она решает?
«Где еще в модулях электронного журнала жизненно необходимо
применить классы и объекты?»
• Зачем нужны модификаторы доступа private и public?
• Каковы главные плюсы рефакторинга процедурного кода в ООП?

14.

Спасибо за внимание!
Вопросы по материалу занятия и практической работе
МДК 11.02 • Кафедра информационных технологий и программирования
English     Русский Rules