За последние 24 часа нас посетили 30536 программистов и 1814 роботов. Сейчас ищут 820 программистов ...

Замещение объекта в this в методе на массив объектов

Тема в разделе "Прочие вопросы по PHP", создана пользователем mxSandr, 9 июн 2013.

  1. mxSandr

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

    С нами с:
    9 июн 2013
    Сообщения:
    3
    Симпатии:
    1
    Доброе время суток, друзья.

    Пишется админка для личного пользования.

    Хотелось бы вот такой командой
    Код (Text):
    1. $site->page->news->getAll();
    с помощью метода

    Код (Text):
    1. function getAll(){
    2.         $st = $this->db->query('SELECT
    3.                 news.id,
    4.                 news.name,
    5.                 news.text,
    6.                 news.image_id,
    7.                 news.alias,
    8.                 news.date,
    9.                 image.name,
    10.                 image.path
    11.             FROM
    12.                 news
    13.             LEFT JOIN
    14.                 image
    15.             ON
    16.                 image.id = news.image_id
    17.             WHERE
    18.                 news.deleted = 0 AND
    19.                 news.display = 1'.
    20.         '   ORDER BY
    21.                 news.date DESC');
    22.         $st->setFetchMode(PDO::FETCH_CLASS ,  'news');
    23.         $temp;
    24.         while($temp[] = $st->fetch()){
    25.         }
    26.         $this = $temp;
    27.     }
    получать в
    Код (Text):
    1. $site->page->news
    массив из объектов новостей.
    Последняя строчка в методе вызывает ошибку
    Код (Text):
    1. $this = $temp;
    Понимаю, что $this указывает на конкретный экземпляр, но думал что в php динамическая типизация настолько динамическая, что позволит заменить $this на массив таких же объектов, но не получается.

    Как вариант, конечно, можно переписать классы, чтобы новости получались так:
    Код (Text):
    1. $site->page->getNews();
    и поместить новости в $this->news[],
    но мне хочется реализовать именно тот, что был описан выше.

    Спасибо.

    Апдейт:орфография
     
  2. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Код (Text):
    1. $this = $temp;
    Код ещё обрабатывается, изнутри взорвать текущий блок не получится, нужно сначала выйти.
    Пусть функция getAll() возвращает массив, тогда можно
    Код (PHP):
    1. $tempArr=$site->page->news->getAll();
    2. $site->page->news=$tempArr; 
    Экземпляр класса с функцией getAll() перетрётся массивом.
    Или попробуйте перегрузку свойств
     
  3. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
     
  4. mxSandr

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

    С нами с:
    9 июн 2013
    Сообщения:
    3
    Симпатии:
    1
    Почти так и сделал :)

    Код (Text):
    1. $site->page->news = news::getAll();
     
  5. mxSandr

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

    С нами с:
    9 июн 2013
    Сообщения:
    3
    Симпатии:
    1
    Господи, статический контекст... То чувство, когда перечитываешь свои вопросы несколько лет спустя.
     
    romach нравится это.