За последние 24 часа нас посетили 56922 программиста и 1768 роботов. Сейчас ищут 1012 программистов ...

Вывод в цикле инфы объектов

Тема в разделе "PHP для новичков", создана пользователем zevilz, 3 апр 2014.

  1. zevilz

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

    С нами с:
    14 июн 2010
    Сообщения:
    182
    Симпатии:
    0
    Начал осваивать ООП по книге Метта Зандстра, но застрял на вот этом.
    Есть класс, на его основе создаются 2 объекта $item_1 и $item_2:
    Код (Text):
    1. $item_1 = new classItems( свойства );
    2. $item_2 = new classItems( свойства );
    создан класс для вывода инфы по всем объектам в цикле:
    Код (Text):
    1. class itemWrite {
    2.         private $all_items = array();
    3.     public function addItem (classItems $ttt) {
    4.         $this->all_items[] = $ttt;
    5.     }
    6.     public function writeItemInPage () {
    7.         $item_main_text = "";
    8.         foreach ($this->all_items as $ttt)
    9.         {
    10.             $item_main_text = $ttt->getItemInfo();
    11.         }
    12.         print $item_main_text;
    13.     }
    14. }
    вывод без цикла проходит. Но с циклом не получается:
    Код (Text):
    1. $write_item = new itemWrite();
    2. $write_item->addItem($item_1);
    3. $write_item->addItem($item_2);
    4. $write_item->writeItemInPage();
    в массив попадает только последний объект $item_1 и выводится только он. Как правильно сделать?

    Добавлено спустя 22 минуты 41 секунду:
    Ошибка найдена. print вынесен за пределы foreach
    Автора на кол))
     
  2. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    o_O
     
  3. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Одолжить колышек?
     
  4. zevilz

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

    С нами с:
    14 июн 2010
    Сообщения:
    182
    Симпатии:
    0
    ага))
    кстати, в книге такая же фигня
     
  5. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Тогда у меня вообще вопрос встает касательно этого фрагмента:

    Код (PHP):
    1. $item_main_text = "";
    2.       foreach ($this->all_items as $ttt)
    3.       {
    4.          $item_main_text = $ttt->getItemInfo();
    5.       }
    6.       print $item_main_text;
    При чем тут массивы-то?

    И зачем переменную столько раз просто перезаписывать?

    Код (PHP):
    1.       foreach ($this->all_items as $ttt)
    2.       {
    3.         echo $ttt->getItemInfo();
    4.       }
    либо

    Код (PHP):
    1. $item_main_text = array();
    2.       foreach ($this->all_items as $ttt)
    3.       {
    4.          $item_main_text[] = $ttt->getItemInfo();
    5.       }
    6.       print_r($item_main_text);
    Тогда уж.
     
  6. zikko122

    zikko122 Новичок

    С нами с:
    1 апр 2014
    Сообщения:
    27
    Симпатии:
    0
    Код (Text):
    1. class itemWrite {
    2.         private $all_items = array();
    3.    public function addItem (classItems $ttt) {
    4.       $this->all_items[] = $ttt;
    5.    }
    6.    public function writeItemInPage () {
    7.       $item_main_text = "";
    8.       foreach ($this->all_items as $ttt)
    9.       {
    10.          $item_main_text .= $ttt->getItemInfo();
    11.       }
    12.       print $item_main_text;
    13.    }
    14. }
    попробуй так...не знаю поможет, но попробуй
     
  7. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    ООП - это тут точно громко сказано :D
     
  8. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Ну ты хоть бы пробельчик добавлял перед присовением. Будет же все в одну строку лупить неразрывную.
     
  9. zevilz

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

    С нами с:
    14 июн 2010
    Сообщения:
    182
    Симпатии:
    0
    А чем не ООП? Класс же есть уже))
    Fell-x27, я ж уже подписал, что уже решил проблему. Я пока делаю все по книжке, а в реальном проекте уже по своему буду делать.

    У меня тут несколько вопросиков образовалось еще:
    1. Что правильней использовать print или echo? Всегда использовал echo, а в книге везде print. Думал может в ООП так и надо? Или вообще пофиг?

    2. Раньше использовал везде двойные кавычки, а в html тексте внутри php кода одинарные
    Код (Text):
    1. echo "<p class='main'>".$item["text"]."</p>";
    Потом где-то прочитал, что правильней и быстрее обрабатывается код, где кавычки наоборот
    Код (Text):
    1. echo '<p class="main">'.$item['text'].'</p>';
    И начал писать код уже таким образом. Тут в книге опять двойные кавычки везде используются. Как правильно то? Но тут одну особенность заметил при написании кода в моем редакторе (Geany). Если писать вот такой код:
    Код (Text):
    1. $info = "{$this->discount}";
    то свойство discount предложится редактором автоматически при вводе нескольких начальных символов слова, т.к. это свойство уже имеется в скрипте. Если писать в одинарных кавычках то этого уже не произойдет. Исходя из этого, а может из за особенностей Geany, двойные кавычки правильней.

    3. В этой же книжке постоянно используется примерно вот такая конструкция для вставки переменных в html код:
    Код (Text):
    1. $info = "<p>{$this->discount}</p>";
    а в чем отличие этой конструкции от вот этой?:
    Код (Text):
    1. $info = "<p>".$this->discount."</p>";
    Или это просто разные реализации одного и того же?
     
  10. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Вообще пофиг. ООП и print никак не связаны.Более того, нет ООП-php и неООП-php как взаимоисключающих вещей. Можно вообще делать гибридные решения.
    Это было актуально до 5го пыха. Теперь ты разницу не заметишь в реальном мире, только в супер-изощренных тестах.
    Как нравится, так и правильно.

    Ни в чем. Но вторая будет работать там, где по версии не потянет первая.
     
  11. zevilz

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

    С нами с:
    14 июн 2010
    Сообщения:
    182
    Симпатии:
    0
    Fell-x27, спасибо за краткий и внятный ответ. А то гуглеж выдает много противоречивых ответов. Короче, пишу, как хочу)))
     
  12. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Все очень просто. Смотри на даты постов, утверждающих, что одни символы экономнее других. Скажем так, повсеместная замена кавычек не даст тебе выигрыша в производительности проекта на N%. Это уже давно не мера оптимизации, а экономия на спичках.

    Оптимизировать надо алгоритмы и архитектуру. И то, тогда, когда это нужно. Отвоевывать 2кб памяти у скрипта путем перепиливания половины кода - это не тру. А оптимизировать что-то путем замены кавычек - это вообще смех сегодня.
     
  13. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Одинарные ковычки быстрее.
     
  14. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    На полторы микросекунды?
     
  15. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ни на сколько