Тема: Переведення логіки на Об’єктно-орієнтоване програмування (OOP).
Створення найпростіших класів TaskController та UserAuth, перенесення процедурних функцій обробки у методи класів.
Мета: Ознайомитися з парадигмою об’єктно-орієнтованого програмування, інкапсуляцією логіки та поняттями “Клас”, “Об’єкт”, “Методи”. Зробити код проєкту легшим для розуміння та масштабування.
Технологічний стек: PHP OOP (class, public/private, $this, __construct()).
TaskController для інкапсуляції всіх операцій над зміною та управлінням завданнями.__construct(), який автоматично прийматиме і зберігатиме екземпляр з’єднання з БД ($pdo).index.php, create.php, delete.php всередину методів класу.У вашому проєкті створіть нову папку classes або controllers. Всередині додайте файл TaskController.php.
<?php
class TaskController {
private $pdo; // Приватна властивість для зберігання БД підключення
// Конструктор ініціалізує БД під час створення об'єкта
public function __construct($pdoConnection) {
$this->pdo = $pdoConnection;
}
}
?>
Усередині класу створіть публічний метод getAllTasks():
public function getAllTasks() {
$stmt = $this->pdo->query('SELECT * FROM tasks ORDER BY id DESC');
return $stmt->fetchAll();
}
Зверніть увагу на конструкцію $this->pdo, яка необхідна для доступу до приватного збереженого екземпляру бази з поточного об’єкта.
Відкрийте свій index.php. Видаліть рядки отримання завдань через прямий виклик $stmt->query(), які ви писали у 12-й роботі.
Натомість підключіть файл TaskController.php:
require_once 'db.php'; // отримуємо $pdo
require_once 'classes/TaskController.php';
// Створюємо екземпляр (об'єкт) класу TaskController (New Instance)
$taskController = new TaskController($pdo);
// Викликаємо публічний метод для нашої змінної $tasks:
$tasks = $taskController->getAllTasks();
HTML-шаблон нижче на цьому файлі змінювати НЕ потрібно, адже він все ще перебирає масив $tasks, як і раніше!
Додайте в клас публічні методи: createTask($title, $description, $priority, $userId) та deleteTask($id).
Перенесіть всередину код підготовлених виразів ($stmt = $this->pdo->prepare(...) та $stmt->execute(...)) з файлів create.php та delete.php.
Відкрийте файли-обробники create.php і delete.php та замініть SQL-код на виклик нових методів з об’єкта (наприклад $taskController->deleteTask($_GET['id']);).
$pdo всередині класу і залишаючи доступними лише певні методи (напр. getAllTasks).__construct()? Коли і ким він викликається?$this? Звідки в методі getAllTasks ми взяли змінні (властивості), якщо ми не передавали їх як аргументи в цей метод?public, private, protected у властивостей і методів класу? Що станеться, якщо спробувати вивести в браузер echo $taskController->pdo; в index.php?lab16.md вставити повний код створеного класу TaskController.php.index.php (там, де ви використовуєте ключове слово new й викликаєте методи через ->).commit на GitHub.