За последние 24 часа нас посетил 21991 программист и 987 роботов. Сейчас ищут 690 программистов ...

ООП Отображение кода. Файл выво

Тема в разделе "PHP для новичков", создана пользователем Hampni, 15 апр 2022.

  1. Hampni

    Hampni Новичок

    С нами с:
    15 апр 2022
    Сообщения:
    2
    Симпатии:
    0
    Не могу вывести свойство объекта на странице вывода.
    Делаю страницу новостей, вот само задание:
    - Создайте класс Article - модель одной новости
    - Создайте класс News - модель хранилища новостей
    news.php - отображает список всех новостей. Заголовок у каждой - ссылка на страницу этой новости, под заголовком - краткий текст

    Создал класс News:
    <?php
    class News
    {
    public $newsarray = [];
    public function getNews()
    {
    return $this->newsarray;
    }
    public function upload(Article $article)
    {
    $this->newsarray[] = $article;
    }
    }

    Класс Article:
    <?php
    class Article
    {
    public $header;
    public $text;
    public $shorttext;

    public function __construct($header,$shorttext, $text)
    {
    $this->header = $header;
    $this->text = $text;
    $this->shorttext = $shorttext;
    }
    }

    Файл входа
    <?php
    require __DIR__ . '/CArticle.php';
    require __DIR__ . '/CNews.php';
    require __DIR__ . '/../view.php';
    $Article1 = new Article
    ('заголовок1',
    'Описание1',
    'Полный текст1');

    $Article2 = new Article
    ('заголовок2 ',
    'описание2',
    'Полный текст2');


    $newsdata = new News;
    $newsdata->upload($Article1);
    $newsdata->upload($Article2);

    $view = new View();
    foreach ($newsdata->getNews() as $index => $value) {
    $view->assign($index,$value);
    }

    foreach ($view->__construct() as $index => $value) {
    $view->display('news');
    }

    Вот файл вывода:
    <html>
    <head>
    <title> Все Новости </title>
    </head>
    <body>

    <a href="" id="1"><h2><?= ___________?></h2></a> <br>
    <article>'Описание' </article> <br>


    </body>
    </html>

    На месте нижних подчеркиваний не могу понять никак что написать. Пытался такое:
    $value->text
    $this->value1[$index]->$value->text

    в целом суть понимаю но никак не могу догнать что не так. Я вижу это так: я создал обьекты класса статьи, засунул их в обьект класса книги новостей. И пытаюсь вывести свойство обьекта в обьекте через foreach несколько раз. Но индекс и значение файл отображения почему то не видит. Помогите разобраться
     
  2. Hampni

    Hampni Новичок

    С нами с:
    15 апр 2022
    Сообщения:
    2
    Симпатии:
    0
    Забыл написать класс View:
    <?php
    class View
    {
    protected $value1 = [];

    public function __construct()
    {
    return $this->value1;
    }

    public function assign($name,$value)
    {
    $this->value1[$name] = $value;
    }
    public function display($template)
    {
    include __DIR__ . '/news/' . $template .'.php';
    }
    public function render($template)
    {
    ob_start();
    include __DIR__ . '/' . $template .'.php';
    $bufdata = ob_get_contents();
    ob_end_clean();
    return $bufdata;
    }
    }
     
  3. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    417
    Симпатии:
    71
    Вот только зачем все эти классы если на работе всё равно придется применять готовый фреймворк? :(
     
  4. brevis

    brevis Активный пользователь

    С нами с:
    23 июл 2019
    Сообщения:
    69
    Симпатии:
    20
    PHP:
    1. <?php
    2.  
    3. // метод render() класса View
    4. public function render($template)
    5. {
    6.     ob_start();
    7.     extract($this->value1); // <--- ключевая идея
    8.     include __DIR__ . '/' . $template .'.tpl.php';
    9.     $bufdata = ob_get_contents();
    10.     ob_end_clean();
    11.     return $bufdata;
    12. }
    PHP:
    1. <!-- шаблон -->
    2.  
    3. <html>
    4. <head>
    5. <title> Все Новости </title>
    6. </head>
    7. <body>
    8. <?php foreach ($news as $acticle) : ?>
    9.     <article>
    10.         <h2><?= $acticle->header; ?></h2>
    11.         <p><?= $acticle->shorttext; ?></p>
    12.     </article>
    13. <?php endforeach; ?>
    14. </body>
    15. </html>
    Все вместе в сборе https://glot.io/snippets/g8y6en8g91