PHP5.3 Ориентированное объектное моделирование для генерации HTML, возможность или узкое место производительности? - PullRequest
0 голосов
/ 23 марта 2011

Основная мотивация в этом заключается в том, что я очень устал или использую php-теги для написания php-представлений, которые были очень уродливыми.Рассмотрим такой подход:

<?php
<ul>
    <?php echo foreach($products as $product): ?>
    <li><?php echo $product->getName()?><li>
</ul>

Это базовый подход тривиального MVC с представлениями, но я устал от этого, поэтому вместо него я использую phpQuery :

<?php
$ul = pq('<ul />');

foreach($products as $product) {
    $ul->append(pq('<li />')
        ->html($product->getName())
    );
}

echo $ul;

Это намного чище.К сожалению, phpQuery не активен в разработке.Дело в том, что phpQuery запрограммирован процедурным способом, и его действительно трудно понять и поддерживать, и он содержит некоторые ошибки, которые делают его довольно бесполезным в большинстве случаев манипулирования DOM.Я думал о написании ОО-подхода к написанию DOM на основе jQuery с использованием компонента Zend Framework Zend_Dom_Query , с тем же подходом phpQuery: тот же интерфейс, что и у jQuery.

После некоторого поиска в сетиВ PHP HTML Generators я не могу найти много того, что было сделано в этой части, и мой вопрос: использует OO с PHP для генерации HTML узкого места в производительности, поскольку весь статический HTML будет генерироваться на стороне сервера?

Я знаю, что есть подход HAML, но мне нравится идея манипулирования DOM, так что можно внедрить html в любое время в любом месте во время выполнения скрипта.Манипулирование DOM на стороне сервера приводит к тому, что сценарий наследования выглядит следующим образом:

//a parent index.phtml
$container = pq('<div />')
    ->addClass('.container')
    ->html($this->_("Hello World!"));

$this->setRenderReturn($container);

//a child index.phtml
$container = $this->renderParent(__FILE__); //retrieves the parent just like the conventional parent:: in php scripts
$container->addClass('anotherClass');

$this->setRenderReturn($container);

Кроме того, в случае, если я пропустил библиотеку PHP, которая делает именно это, я был бы рад, если бы кто-то мог указать мне на это.

1 Ответ

2 голосов
/ 23 марта 2011

В прямой ответ на ваш вопрос ...

использует OO с PHP для создания HTML узкого места в производительности, поскольку весь статический HTML будет генерироваться на стороне сервера?

Да.

Вы должны взглянуть на Twig и особенно на расширения, добавленные в Symfony 2. Он поддерживает наследование шаблонов, а также именованные разделы для перезаписи / вставки разметки.

...