Xpoint
   [напомнить пароль]

Многократное использование кода

Метки: [без меток]
[арх]
2010-11-02 19:14:01 [обр] Дмитрий[досье]
Подскажите, плз. Есть скрипт "news.php", и есть скрипт "newitem.php". В "news.php" содержится код вывода блока новостей, конкретно 10 штук, код каждой новости лежит в "newitem.php". Получается, "newitem.php" используется 10 раз в одном скрипте. Как сделать, чтобы не подключать "newitem.php" 10 раз подряд функцией include(), а подключить однократно, и использовать загруженный код 10 раз?
спустя 5 минут [обр] Александр Михалицын(0/16)[досье]
спустя 12 минут [обр] Дмитрий[досье]
Вопрос в том, чтобы сделать аналог PartialLoop в http://framework.zend.com/manual/en/zend.view.helpers.html
спустя 13 часов [обр] Филипп Ткачев(20/112)[досье]
Сложить новости в массив и вывести их в цикле? Это как раз то, что на самом деле делает PartialLoop.
спустя 1 час 38 минут [обр] Дмитрий[досье]

Вот, сделал функцию, загружающую partial только один раз, при первом обращении; при повторном обращении используется сохраненная копия:

$PARTIALS=array();
...
function partial($filename){
   if(!$PARTIALS[$filename]) $PARTIALS[$filename]=file_get_contents($filename);
   echo $PARTIALS[$filename];
   }

- не работает... Если в загружаемом файле "partial.php" находится фрагмент PHP кода, то этот фрагмент не исполняется.

спустя 17 минут [обр] Дмитрий[досье]
вообще, это возможно в PHP, многократно вставлять сохраненный в переменной / кэшированный код?
спустя 2 часа 35 минут [обр] Филипп Ткачев(20/112)[досье]
Дмитрий[досье], да,возможно! Для выполнения кода можно использовать конструкцию eval()
спустя 9 часов [обр] Филипп Ткачев(20/112)[досье]
Еще можете посмотреть в сторону функций, управляющих буферированием вывода.
Разумно сочетая их с применением функций кэширования memcached можете добиться впечатляющей производительности веб-приложения.
спустя 1 час 50 минут [обр] Прокаев2(13/35)[досье]

перепишите newitem.php, оформите код функцией как вам предложил Александр Михалицын[досье]

и не слушайте вредных советов , eval - зло

спустя 9 часов [обр] Филипп Ткачев(20/112)[досье]
Прокаев2[досье], eval() не зло, если им правильно пользоваться.
спустя 30 минут [обр] Прокаев2(13/35)[досье]
но для уровня ТС - однозначное зло
спустя 24 минуты [обр] Алексей Севрюков(162/1280)[досье]

Прокаев2[досье] я не совсем понимаю почему eval в этом контексте зло. А include, require (или те же самые use, require и do в Perl) это тогда почему не зло?
Ведь алгоритмы работы совершенно одинаковые, прочитать файл и контент заEVALить. Это же скриптовый язык, другим путем код извне не подключишь.

Более того, eval часто используется для предотвращения смерти скрипта от некритической (по мнению программиста) ошибки - это тоже зло?

Это называется "слышал звон, да не знаю где он". eval - зло, если его используют кривые руки. ИМХО.

спустя 5 часов [обр] Прокаев2(13/35)[досье]
прочитайте первое сообщение топика. зачем там eval ?
зачем усложнять? ведь функция оптимальное решение
спустя 29 минут [обр] Филипп Ткачев(20/112)[досье]

Лично у меня в голове не укладывается то, что человек знающий о PartialLoop в ZendFramework, не может работать с обычными функциями и массивами.

Прокаев2[досье], все зависит от ситуации. В текущей использовать eval() действительно глупо.

спустя 8 часов [обр] Владимир Михайленко(18/33)[досье]
А на самом деле ;)
Чтобы сделать аналог PartialLoop надо посмотреть как он устроен. А PartialLoop как раз и делает 10 раз include(). Лучшего способа нет.
Powered by POEM™ Engine Copyright © 2002-2005