У меня есть веб-сайт, написанный на процедурном PHP, и теперь я перекодирую его в (хотя бы частично) стиле ООП, чтобы начать его изучение.Это простая страница, отображающая несколько учебных курсов (название, описание и т. Д.) Из базы данных.Администратор может добавлять или удалять что угодно, поэтому оно должно быть динамичным.Сначала я запустил одну строчку кода:
$courses=$pdo->run("SELECT id,title,description FROM courses WHERE status=1 ORDER BY id")->fetchAll(PDO::FETCH_CLASS, 'Course');
$cmax = count($courses);
и повторил, например, $courses[3]->description
, но мне показалось, что я ничего не делаю, только притворяюсь, что ООП, просто используя многомерный массив.Опять же, это было бы хорошо для целей веб-сайта, но мой вопрос, чтобы привыкнуть к логике ООП, могу ли я сделать это так: я создаю выпадающее меню только с заголовками и идентификаторами из базы данных,и после того, как кто-то нажал, только тогда я создаю объект (чтобы получить описание, дату, учителя, что угодно):
$obj = new Course($pdo,$userSelectedID);
echo $obj->getTitle($pdo);
$obj->showDetails($pdo); // etc
Класс:
class Course {
protected $id;
protected $title;
protected $description;
public function __construct($pdo,$id) {
$this->id=$id;
}
public function getTitle($pdo) {
$this->title=$pdo->run("SELECT title FROM courses WHERE id=?",[$this->id])->fetchColumn();
return $this->title;
}
public function getDescription($pdo) {
$this->description=$pdo->run("SELECT description FROM courses WHERE id=?",[$this->id])->fetchColumn();
return $this->description;
}
public function showDetails($pdo) {
echo "<h3>".$this->getTitle($pdo)."</h3>".$this->getDescription($pdo);
}
}
Этонеправильный подход?Можно ли запускать команды sql внутри класса?Особенно, когда мне уже приходилось использовать некоторые данные БД для создания выпадающего меню.Я надеюсь, что мой вопрос имеет смысл.
PS: я слышал, что передача объекта PDO каждый раз не лучшая практика, но я пока не готов сделать это с рекомендованным экземпляром (?)