Request for Comments: Improved short tags for templating
- Version: 1.0
- Date: 2008-04-03
- Author: Stas Malyshev stas@php.net
- Status: Implemented in PHP 5.4 (Always available
<?=
)
Rationale
Many template systems use PHP as its underlying language, so that the templates could be parsed and run by the efficient PHP engine, edited by PHP tools, benefit from PHP performance solutions, etc. PHP template can be written in two ways, with full tags:
This is a home page for <i><?php echo $user; ?></i>. Last visited at <?php echo $lastvisit; ?>.
or short tags:
This is a home page for <i><?= $user ?></i>. Last visited at <?= $lastvisit ?>.
The second form looks much nicer and cleaner, and can be easily understood and edited by non-PHP people like graphical designers, copy editors, etc. However, to use this form, the short_open_tag INI setting should be enabled. When this tag is enabled, <? also is treated as PHP starting tag, which may be a problem for people using XML in templates, since the engine would confuse XML starting tag with PHP code start.
Proposals
To try and enable people to write short and nice templates, while keeping all XML folks happy, the following solutions were proposed:
Runtime short tags
Make short_open_tags settable in runtime, thus allowing the template engine to turn it on when parsing template, while leaving the opportunity for the user to keep it off outside template parsing.
- Pro: Allows the setting to be controlled locally without the user needing to do any administration or configuration
- Contra: If the setting “leaks” (such as by template having an exception which is not properly caught by the engine, etc.) it may influence other application parts and break them.
Always available template tags
Make the tag <?= work even when short_open_tag is off, thus allowing nice templates without breaking the XML templates.
- Pro: Allows the nice templates to always work, while keeping XML templates working with short_open_tag being off.
- Contra: Templates with this tag wouldn't be validated as XML, some tools may be confused by this syntax.
Make other syntax
Make some other short XML-compliant syntax (such as <?:) to be used in templates.
- Pro: Allows both XML checkers and template writers to be happy
- Contra: Unusual syntax not supported by 100% of tools and not familiar to 100% of users