За последние 24 часа нас посетили 44469 программистов и 2997 роботов. Сейчас ищут 1317 программистов ...

Мой первый вывод новостей

Тема в разделе "PHP для новичков", создана пользователем Dimon2x, 9 апр 2017.

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Есть такое задание:

    1. Создайте класс новостей для сайта.

    2. Реализуйте страницу, на которой вы будете эти новости выводить используя только методы класса (к свойствам обращаться нельзя).

    Я это задание сделал, но думаю, что мой код очень ужасный и не правильный, что я не так сделал?

    А может надо было поместить все статьи в один json файл и вывести разметку циклом?

    Не говорите мне пока про базу данных, сначала я хочу потренироваться на jsone.

    index.php

    PHP:
    1. <?php
    2. header('Content-Type: text/html; charset=utf-8');
    3. class News{
    4.     public function __construct($file_get_contents){
    5.         $this->file_get_contents = file_get_contents($file_get_contents);
    6.     }
    7.     public function newsStr(){
    8.         return $this->file_get_contents;
    9.     }
    10.     public function newsArray(){
    11.         return json_decode($this->newsStr(), true);
    12.     }
    13.     public function newsCells(){
    14.         return $this->newsArray()['news'];
    15.     }
    16.     public function newsTitle(){
    17.         return $this->newsCells()['title'];
    18.     }
    19.     public function newsDate(){
    20.         return $this->newsCells()['date'];
    21.     }
    22.     public function newsAuthor(){
    23.         return $this->newsCells()['author'];
    24.     }
    25.     public function newsDescription(){
    26.         return $this->newsCells()['description'];
    27.     }
    28. }
    29. ?>
    30. <!DOCTYPE html>
    31. <html>
    32.     <head>
    33.         <title>Новости сайта</title>
    34.         <link rel="stylesheet" href="./style.css">
    35.     </head>
    36. <body>
    37.     <div class="content">
    38.         <h2>Последние новости</h2>
    39.         <div class="news">
    40.             <?php $news1 = new News('news1.json');?>
    41.             <div class="title"><?php echo $news1->newsTitle()?></div>
    42.             <div class="description"><?php echo $news1->newsDescription()?></div>
    43.             <div class="date inline-block"><span>Дата:</span> <?php echo $news1->newsDate()?></div>
    44.             <span>|</span>
    45.             <div class="author inline-block"><span>Добавил</span> <?php echo $news1->newsAuthor()?></div>
    46.         </div>
    47.        
    48.         <div class="news">
    49.             <?php $news1 = new News('news2.json');?>
    50.             <div class="title"><?php echo $news1->newsTitle()?></div>
    51.             <div class="description"><?php echo $news1->newsDescription()?></div>
    52.             <div class="date inline-block"><span>Дата:</span> <?php echo $news1->newsDate()?></div>
    53.             <span>|</span>
    54.             <div class="author inline-block"><span>Добавил</span> <?php echo $news1->newsAuthor()?></div>
    55.         </div>
    56.        
    57.         <div class="news">
    58.             <?php $news1 = new News('news3.json');?>
    59.             <div class="title"><?php echo $news1->newsTitle()?></div>
    60.             <div class="description"><?php echo $news1->newsDescription()?></div>
    61.             <div class="date inline-block"><span>Дата:</span> <?php echo $news1->newsDate()?></div>
    62.             <span>|</span>
    63.             <div class="author inline-block"><span>Добавил</span> <?php echo $news1->newsAuthor()?></div>
    64.         </div>
    65.     </div>
    66. </body>
    67. </html>
    css

    Код (CSS):
    1. content{
    2.     border: 1px solid;
    3.     width: 600px;
    4.     margin: 0 auto;
    5. }
    6. h2{text-align: center;}
    7. .news{
    8.     border: 3px solid orange;
    9.     padding: 10px;
    10. }
    11. .title, .description{
    12.     padding-bottom: 10px;
    13. }
    14. .inline-block{
    15.     display: inline-block;
    16.     vertical-align: top;
    17.     font-weight: bold;
    18. }
    news1.json

    Код (Text):
    1. {
    2.     "news": {
    3.         "title": "Изобрён вечный двигатель",
    4.         "date": "05.04.2017",
    5.         "author": "Admin",
    6.         "description": "Совсем недавно, придумали вечный двигатель, который не требует обслуживания, но в эксплуатацию его запретили, так как хотят, что бы люди постоянно  мучились в рабстве"
    7.     }
    8. }
     
  2. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Вердикт:
    Задание вы действительно сделали но забив гвоздь микроскопом.
    Вы обернули сущность в класс совершенно не поняв зачем это нужно делать и почему с сущностями при реализации ооп подхода так нужно работать.
    И далее, как следствие, не поняли как именно это можно реализовать.

    Что необходимо сделать чтобы понять:
    попробуйте вдумчиво изучить курс от Зандстры "Объекты, практики, методики программирования на PHP...". Как-то так зовется книга.
     
    #2 Zuldek, 9 апр 2017
    Последнее редактирование: 9 апр 2017
    alexblack нравится это.
  3. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    ооп в основном применяют из-за наследования
     
  4. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Крайне неверное представление об ООП
     
  5. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Дмитрий, изучите то, что рекомендовано, вам это поможет, можете верить.
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    ООП в основном применяют из-за ООП. Перенес тему из ветки "для профи" в ветку "для новичков". Нет, это не зазорно, это отличная ветка, где подскажут, научат и не будут особо придираться :) Главное - прислушиваться.
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    меня на реддите с моим ооп обругали =) но я согласен =(
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    А это фетиш такой - по одной новости в файл записывать, и потом по одному файлу в исходнике выводить? В json-е можно и массивы хранить. А ещё в php есть циклы. Только не говорите, что вам классы раньше циклов на вашем курсе объясняют.
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.820
    Симпатии:
    1.333
    Адрес:
    Лень
    json_decode умеет переводить json массив в объект и дальше работать как используя только методы класса
    --- Добавлено ---
    PHP:
    1. $json = '{"a":{"name":"WW1"},"b":{"name":"WW2"},"c":{"name":"WW3"},"d":{"name":"WW4"},"e":{"name":"WW5"}}';
    2.  
    3. echo implode ( '<br>', array_map ( function ( $OBJ ) { return $OBJ -> name; }, json_decode ( $json ) ) );
    --- Добавлено ---
    или блин я даун, не знаю что такое методы в ООП
    --- Добавлено ---
    Код (Text):
    1. // методы:
    2. function Name() {
    3. echo "<h3>John</h3>";
    4. }
     
  10. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Я вот так сделал, нормально ли, как улучшить?

    PHP:
    1. <?php
    2. header('Content-Type: text/html; charset=utf-8');
    3.  
    4. class News{
    5.     private $title;
    6.     private $date;
    7.     private $author;
    8.     private $description;
    9.    
    10.     public function setTitle($title){
    11.         $this->title = $title;
    12.     }
    13.    
    14.     public function getTitle(){
    15.         return $this->title;
    16.     }
    17.    
    18.     public function setDate($date){
    19.         $this->date = $date;
    20.     }
    21.    
    22.     public function getDate(){
    23.         return $this->date;
    24.     }
    25.    
    26.     public function setAuthor($author){
    27.         $this->author = $author;
    28.     }
    29.    
    30.     public function getAuthor(){
    31.         return $this->author;
    32.     }
    33.    
    34.     public function setDescription($description){
    35.         $this->description = $description;
    36.     }
    37.    
    38.     public function getDescription(){
    39.         return $this->description;
    40.     }
    41.  
    42.     public function getJson($fileName){
    43.         $json = file_get_contents($fileName);
    44.         $data = json_decode($json, true);
    45.         $news = new News();
    46.         $news->setTitle($data['news']['title']);
    47.         $news->setDate($data['news']['date']);
    48.         $news->setAuthor($data['news']['author']);
    49.         $news->setDescription($data['news']['description']);
    50.         return $news;
    51.     }
    52. }
    53.  
    54. $catalog = scandir(__DIR__ . '/article');
    55. ?>
    56.  
    57. <!DOCTYPE html>
    58. <html>
    59.     <head>
    60.         <title>Новости сайта</title>
    61.         <link rel="stylesheet" href="./style.css">
    62.     </head>
    63. <body>
    64.     <div class="content">
    65.         <h2>Последние новости</h2>
    66.         <?php
    67.             $ob1 = new News();
    68.             foreach($catalog as $file){
    69.                 if(pathinfo($file, PATHINFO_EXTENSION) == 'json'){
    70.                     $json = $ob1->getJson('article/' .$file);
    71.                    
    72.                     echo '<div class="news">';
    73.                         echo '<div class="title">';
    74.                             echo $json->getTitle();
    75.                         echo '</div>';
    76.                        
    77.                         echo '<div class="description">';
    78.                             echo $json->getDescription();
    79.                         echo '</div>';
    80.                        
    81.                         echo '<div class="inline-block"><span class="date">Дата:</span>';
    82.                             echo '<span>' . $json->getDate() .'</span>';
    83.                         echo '</div>';
    84.                         echo '<span> | </span>';
    85.                         echo '<div class="inline-block"><span class="date">Добавил:</span>';
    86.                             echo $json->getAuthor();
    87.                         echo '</div>';
    88.                        
    89.                     echo '</div>';
    90.                    
    91.                 }
    92.             }  
    93.         ?>
    94.     </div>
    95. </body>
    96. </html>