echoExecute() method

Since most common use of execute() method is to echo its output, PHPTAL offers convenience method that echoes output immediately without buffering. This enables streaming of arbitrarily large output without hitting memory limit.


Fragments of template that use tal:on-error or phptal:cache are buffered regardless.

The code:

    $tpl = new PHPTAL('template.xhtml');

is same as:

    $tpl = new PHPTAL('template.xhtml');
    echo $tpl->execute();

but little faster.


Currently echoExecute() method has some unexpected limitations.


When echoExecute() is used, PHPTAL will throw exception if you call any macro defined in a file that has XML declaration or DOCTYPE.

Typically PHPTAL allows templates to "inherit" DOCTYPE from another file (useful when subpage is calling main layout template), however that is not possible without buffering.

To work around this you can:

  • Keep using echo $tpl->execute() until this limitation is lifted.

  • Remove all DOCTYPEs and XML declarations from templates and echo them from PHP before calling echoExecute().