Есть такое задание: 1. Создайте класс новостей для сайта. 2. Реализуйте страницу, на которой вы будете эти новости выводить используя только методы класса (к свойствам обращаться нельзя). Я это задание сделал, но думаю, что мой код очень ужасный и не правильный, что я не так сделал? А может надо было поместить все статьи в один json файл и вывести разметку циклом? Не говорите мне пока про базу данных, сначала я хочу потренироваться на jsone. index.php PHP: <?php header('Content-Type: text/html; charset=utf-8'); error_reporting(-1); class News{ public function __construct($file_get_contents){ $this->file_get_contents = file_get_contents($file_get_contents); } public function newsStr(){ return $this->file_get_contents; } public function newsArray(){ return json_decode($this->newsStr(), true); } public function newsCells(){ return $this->newsArray()['news']; } public function newsTitle(){ return $this->newsCells()['title']; } public function newsDate(){ return $this->newsCells()['date']; } public function newsAuthor(){ return $this->newsCells()['author']; } public function newsDescription(){ return $this->newsCells()['description']; } } ?> <!DOCTYPE html> <html> <head> <title>Новости сайта</title> <link rel="stylesheet" href="./style.css"> </head> <body> <div class="content"> <h2>Последние новости</h2> <div class="news"> <?php $news1 = new News('news1.json');?> <div class="title"><?php echo $news1->newsTitle()?></div> <div class="description"><?php echo $news1->newsDescription()?></div> <div class="date inline-block"><span>Дата:</span> <?php echo $news1->newsDate()?></div> <span>|</span> <div class="author inline-block"><span>Добавил</span> <?php echo $news1->newsAuthor()?></div> </div> <div class="news"> <?php $news1 = new News('news2.json');?> <div class="title"><?php echo $news1->newsTitle()?></div> <div class="description"><?php echo $news1->newsDescription()?></div> <div class="date inline-block"><span>Дата:</span> <?php echo $news1->newsDate()?></div> <span>|</span> <div class="author inline-block"><span>Добавил</span> <?php echo $news1->newsAuthor()?></div> </div> <div class="news"> <?php $news1 = new News('news3.json');?> <div class="title"><?php echo $news1->newsTitle()?></div> <div class="description"><?php echo $news1->newsDescription()?></div> <div class="date inline-block"><span>Дата:</span> <?php echo $news1->newsDate()?></div> <span>|</span> <div class="author inline-block"><span>Добавил</span> <?php echo $news1->newsAuthor()?></div> </div> </div> </body> </html> css Код (CSS): content{ border: 1px solid; width: 600px; margin: 0 auto; } h2{text-align: center;} .news{ border: 3px solid orange; padding: 10px; } .title, .description{ padding-bottom: 10px; } .inline-block{ display: inline-block; vertical-align: top; font-weight: bold; } news1.json Код (Text): { "news": { "title": "Изобрён вечный двигатель", "date": "05.04.2017", "author": "Admin", "description": "Совсем недавно, придумали вечный двигатель, который не требует обслуживания, но в эксплуатацию его запретили, так как хотят, что бы люди постоянно мучились в рабстве" } }
Вердикт: Задание вы действительно сделали но забив гвоздь микроскопом. Вы обернули сущность в класс совершенно не поняв зачем это нужно делать и почему с сущностями при реализации ооп подхода так нужно работать. И далее, как следствие, не поняли как именно это можно реализовать. Что необходимо сделать чтобы понять: попробуйте вдумчиво изучить курс от Зандстры "Объекты, практики, методики программирования на PHP...". Как-то так зовется книга.
ООП в основном применяют из-за ООП. Перенес тему из ветки "для профи" в ветку "для новичков". Нет, это не зазорно, это отличная ветка, где подскажут, научат и не будут особо придираться Главное - прислушиваться.
А это фетиш такой - по одной новости в файл записывать, и потом по одному файлу в исходнике выводить? В json-е можно и массивы хранить. А ещё в php есть циклы. Только не говорите, что вам классы раньше циклов на вашем курсе объясняют.
json_decode умеет переводить json массив в объект и дальше работать как используя только методы класса --- Добавлено --- PHP: $json = '{"a":{"name":"WW1"},"b":{"name":"WW2"},"c":{"name":"WW3"},"d":{"name":"WW4"},"e":{"name":"WW5"}}'; echo implode ( '<br>', array_map ( function ( $OBJ ) { return $OBJ -> name; }, json_decode ( $json ) ) ); --- Добавлено --- или блин я даун, не знаю что такое методы в ООП --- Добавлено --- Код (Text): // методы: function Name() { echo "<h3>John</h3>"; }
Я вот так сделал, нормально ли, как улучшить? PHP: <?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="inline-block"><span class="date">Дата:</span>'; echo '<span>' . $json->getDate() .'</span>'; echo '</div>'; echo '<span> | </span>'; echo '<div class="inline-block"><span class="date">Добавил:</span>'; echo $json->getAuthor(); echo '</div>'; echo '</div>'; } } ?> </div> </body> </html>