Форумы портала PHP.SU » PHP » Пользовательские функции » нашёл новый способ шаблонизации

Страниц (1): [1]
 

1. scuter - 12 Июля, 2008 - 07:07:27 - перейти к сообщению
вот простая функция
PHP:
скопировать код в буфер обмена
  1. function exp($tpl, $arg)
  2. {
  3.         if(is_array($arg)){foreach($arg as $key => $val){$$key = $val;}}
  4.         eval("\$p = <<<ENV\r\n".$tpl."\r\nENV;\n");
  5.         return $p;
  6. }

вот простой шаблон
CODE (text):
скопировать код в буфер обмена
  1. <html>
  2.         <head>
  3.         </head>
  4.         <body>
  5.                 <h1>fsldkfjghsldfkgh</h1>
  6.                 <h2>{$key}</h2>
  7.                 <h2>{$val}</h2>
  8.                 <h2>{$test}</h2>
  9.                 <h2>{$text}</h2>
  10.         </body>
  11. </html>

а вот так юзаем это дело
PHP:
скопировать код в буфер обмена
  1. print exp(file_get_contents('./test.html'), array('text'=>'sfgsdfgsdfgsdfgs','test'=>'sfkldjghlsdk'));
2. Джур - 12 Июля, 2008 - 11:03:53 - перейти к сообщению
хм... при тестировани показывает что памяти и рессурсов данный метод жрет больше чем простая замена... даже по регуляру.
CODE (text):
скопировать код в буфер обмена
  1. Если нет разници, зачем платить больше?
3. scuter - 12 Июля, 2008 - 15:42:15 - перейти к сообщению
интересно а почему же он так много ресурсов жрёт?
неужели eval така тормозая штука.
4. EuGen - 13 Июля, 2008 - 15:37:06 - перейти к сообщению
Интерпретируемый интерпретатор? .. да, и почему бы оно так тормозило, даже странно.
5. scuter - 14 Июля, 2008 - 01:04:48 - перейти к сообщению
в принципе это в полне возможно,
просто каждый раз когда скрипт запускается он сназало компилируется,
а потом выполняется, но когда используеся eval компилировать приходится несколько раз,
от этого может быть тормоз но это врятли, т.к. это происходить очень бысто,
скорость примерно такая же как в include,
но разница между include и eval только в том что include можно закешировать,
а eval ни как не закешируешь.
(Добавление)
я решил собрать все способы шаблонизаци и хотелось бы услышать ваше мнение об этом
PHP:
скопировать код в буфер обмена
  1. class tpl
  2. {
  3.         var $tage=array('<!--<>','<>-->');
  4.         function replace($replace, $subject)
  5.         {
  6.                 $tag_on = $this->tage[0];
  7.                 $tag_off = $this->tage[1];
  8.                 if(is_array($replace))
  9.                 {
  10.                         foreach ($replace as $key => $val)
  11.                         {
  12.                                 $subject = str_replace($tag_on.$key.$tag_off, $val, $subject);
  13.                         }
  14.                         return $subject;
  15.                 }
  16.                 else
  17.                 {
  18.                         return '';
  19.                 }
  20.         }
  21.         function heredoc($tpl, $arg)
  22.         {
  23.                 if(is_array($arg)){foreach($arg as $key => $val){$$key = $val;}}
  24.                 eval("\$p = <<<ENV\r\n".$tpl."\r\nENV;\r\n");
  25.                 return $p;
  26.         }
  27.         function php_cod($tpl, $arg)
  28.         {
  29.                 ob_start();
  30.                 if(is_array($arg)){foreach($arg as $key => $val){$$key = $val;}}
  31.                 include($tpl);
  32.                 $r = ob_get_contents();
  33.                 ob_end_clean();
  34.                 return $r;
  35.         }
  36. }
6. Stierus - 29 Декабря, 2008 - 11:58:21 - перейти к сообщению
Чем шаблон
CODE (text):
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <h1>fsldkfjghsldfkgh</h1>
  6. <h2>{$key}</h2>
  7. <h2>{$val}</h2>
  8. <h2>{$test}</h2>
  9. <h2>{$text}</h2>
  10. </body>
  11. </html>

Лучше, чем
CODE (text):
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <h1>fsldkfjghsldfkgh</h1>
  6. <h2><?=$key?></h2>
  7. <h2><?=$val?></h2>
  8. <h2><?=$test?></h2>
  9. <h2><?=$text?></h2>
  10. </body>
  11. </html>
, а
CODE (text):
скопировать код в буфер обмена
  1. print exp(file_get_contents('./test.html'), array('text'=>'sfgsdfgsdfgsdfgs','test'=>'sfkldjghlsdk'));
чем
CODE (text):
скопировать код в буфер обмена
  1. include('footer.php');

Изобретатели, блин Улыбка

ps
Заранее предвидя вопросы типа:"А как в переменную загнать?" - кину подсказку: ob_get_contents();

Какие можественные евалы, классы и тд ?Улыбка Понимаю, Smarty можно использовать - там кэширование нормально отлажено, лишние телодвижения что бы не делать, но смысл использовать вашу городьбу для меня совершенно непонятен
7. Singularis - 29 Декабря, 2008 - 15:09:54 - перейти к сообщению
Тем, что в первом случае шаблон может быть .html, а во втором должен быть .php…
8. Champion - 29 Декабря, 2008 - 15:32:34 - перейти к сообщению
В .html да и в чем угодно может интерпретироваться php-код
В .htaccess
AddType application/x-httpd-php .html ....(все остальное)
9. Stierus - 29 Декабря, 2008 - 16:43:47 - перейти к сообщению
Цитата:
Тем, что в первом случае шаблон может быть .html, а во втором должен быть .php…

Хоть .inc обзовите, какая разница ?Улыбка
10. Ch_chov - 19 Января, 2009 - 19:34:17 - перейти к сообщению
Цитата:
хм... при тестировани показывает что памяти и рессурсов данный метод жрет больше чем простая замена... даже по регуляру.


А каким образом вы определяете количество памяти и ресурсов, которые "жрет" скрипт?
11. Джур - 24 Января, 2009 - 21:44:38 - перейти к сообщению
Ну вы некроманты, подняли тему полугодовой давности Улыбка

Ch_chov пишет:
А каким образом вы определяете количество памяти и ресурсов, которые "жрет" скрипт?

разного рода top и xtop никто не отменял. Улыбка да и в РНР есть чем скорость/рессурсы замерить.
12. chaynyk - 06 Апреля, 2009 - 22:51:35 - перейти к сообщению
Champion пишет:
В .html да и в чем угодно может интерпретироваться php-код
В .htaccess
AddType application/x-httpd-php .html ....(все остальное)

Да уж точно, одно дело переменные воткнуть, а вот цикл какой нибудь? а поиск по сайту?
и получиться, что проще и быстрей в *.php или *.inc

 

Powered by ExBB FM 1.0 RC1