Годен ли такой код вывода? Как его улучшить?
<?php
header('Content-Type: text/html; charset=utf-8');
error_reporting(-1);
class News{
private $title;
private $date;
private $author;
private $description;
public function setTitle($title){
$this->title = $title;
}
public function getTitle(){
return $this->title;
}
public function setDate($date){
$this->date = $date;
}
public function getDate(){
return $this->date;
}
public function setAuthor($author){
$this->author = $author;
}
public function getAuthor(){
return $this->author;
}
public function setDescription($description){
$this->description = $description;
}
public function getDescription(){
return $this->description;
}
public function getJson($fileName){
$json = file_get_contents($fileName);
$data = json_decode($json, true);
$news = new News();
$news->setTitle($data['news']['title']);
$news->setDate($data['news']['date']);
$news->setAuthor($data['news']['author']);
$news->setDescription($data['news']['description']);
return $news;
}
}
$catalog = scandir(__DIR__ . '/article');
?>
<!DOCTYPE html>
<html>
<head>
<title>Новости сайта</title>
<link rel="stylesheet" href="./style.css">
</head>
<body>
<div class="content">
<h2>Последние новости</h2>
<?php
$ob1 = new News();
foreach($catalog as $file){
if(pathinfo($file, PATHINFO_EXTENSION) == 'json'){
$json = $ob1->getJson('article/' .$file);
echo '<div class="news">';
echo '<div class="title">';
echo $json->getTitle();
echo '</div>';
echo '<div class="description">';
echo $json->getDescription();
echo '</div>';
echo '<div class="date inline-block"><span>Дата:</span>';
echo $json->getDate();
echo '</div>';
echo '<span> | </span>';
echo '<div class="author inline-block"><span>Добавил:</span>';
echo $json->getAuthor();
echo '</div>';
echo '</div>';
}
}
?>
</div>
</body>
</html>
Перебор json файлов можно сделать через DirectoryIterator:
$files = new RegexIterator(new DirectoryIterator($path), '/\.json$/i');
foreach ($files as $file) {
$news = News::fromJson($file->getFileName());
echo $news->renderHtml();
}
Сам класс можно сделать попроще:
class News {
protected $title, $description, $author, $date;
public function __construct($title, $description, $author, $date) {
$this->title = $title;
$this->description = $description;
$this->author = $author;
$this->date = $date;
}
public static function fromJson($filename) {
$data = json_decode(file_get_contents($filename));
$news = $data['news'];
$obj = new self($news['title'], $news['description'], $news['author'], $news['date']);
}
public function renderHtml() { // Рендер c HEREDOC
$title = htmlspecialchars($this->title);
$author = htmlspecialchars($this->author);
$description = htmlspecialchars($this->description);
$date = htmlspecialchars($this->date);
return <<<HTML
<div class="news">
<div class="title">
$title
</div>
<div class="description">
$description
</div>
<div class="date inline-block">
<span>$date</span>
</div>
<div class="author inline-block">
<span>Добавил: </span> $author
</div>
</div>
HTML;
}
}
Впоследствии, метод render лучше переделать на использование какого-нибудь шаблонизатора, навроде Twig..
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники