Это проблема упрощения.
Реальный код трудно понять, поскольку он учитывает множество нюансов, важных в реальной жизни.
поэтому в обучающих материалах код упрощают, так что начинает казаться что без классов будет даже проще.
Кроме того, авторы видеокурсов в большинстве своем - неграмотные имбецилы, которые с трудом понимают код, который пишут. Кроме шуток. Пример. Вот так пишут обезьяны:
$i = 0;
$newsList = array();
while($row = $result->fetch()) {
$newsList[$i]['id'] = $row['id'];
$newsList[$i]['title'] = $row['title'];
$newsList[$i]['date'] = $row['date'];
$newsList[$i]['author_name'] = $row['author_name'];
$newsList[$i]['short_content'] = $row['short_content'];
$i++;
}
return $newsList;
Реально, макаки.
Этот гамадрил где-то сам увидел обучающий материал из 1990-х годов прошлого века, запомнил его, и теперь лепит уже в свои "обучающие ведидео".
при том что если бы он понимал смысл этого кода, то написал бы просто
$newsList = array();
while($row = $result->fetch()) {
$newsList[] = $row;
}
return $newsList;
Поскольку $row уже содержит все нужные данные и переливать их из пустого в порожнее не нужно.
А если бы наш бабуин хотя бы раз в жизни поинтересовался инструментами, которые он использует, то написал бы и вовсе одну строчку,
return $result->fetchAll();
Поскольку все уже написано до нас - надо только руку протянуть и использовать готовое.
И это я не говорю о том, что класс насковозь дырявый в плане безопасности.
Если вернуться к теме "отдельные функции или класс", то для примера приведенного здесь класс, действительно, не нужен. Любая коллекция статических методов может быть заменена на набор функций.
В нормальной же модели класс нужен, поскольку в ней будут использоваться переменные класса, например соединение с БД. Таким образом его можно будет передать в конструктор один раз и не писать соединение в каждом методе.
Также в модели удобно прописать имя таблицы. Тогда множество методов можно будет унаследовать от единого прототипа. например
abstract class Model {
protected $table;
protected $db;
public function __construct($db) {
$this->db = $db;
}
public function find($id) {
$sql = "SELECT * FROM `$this->table` WHERE id=?";
$stmt = $this->db->prepare($sql);
$stmt->execute([$id]);
return $stmt->fetch();
}
}
class News extends Model {
protected $table = 'news';
}
$news = new News($db);
$article = $news->find($id);
Вот это уже будет минимальное оопэ, и использование класса будет более чем оправдано - один раз написали код, а потом его используем.
Если хочется нормальных обучающих материалов, рекомендую канал Дмитрия Елисеева,
https://www.youtube.com/user/ElisDN/videos