Even the official documentation used to tell us that PHP "short tags" (<? /*...*/ ?>
) are "bad". However, since PHP 5.4, the echo
variety <?= /*...*/ ?>
is permanently enabled regardless of the short_open_tag
setting.
What's changed?
Even if they were previously discouraged solely due to the unpredictable nature of whether short_open_tag
is enabled on a shared hosting platform, surely that argument doesn't go away just because some subset of hosts will be running PHP 5.4?
Arguably this change to the language doesn't inherently signify a change in the recommendation that we should nonetheless avoid "short tags", but if they've gone to the trouble it would certainly seem like the PHP devs no longer "hate" them so much. Right?
The only logical conclusion I can draw at this time is that there must be some objective rationale for the introduction of this change in PHP 5.4.
What is it?
The reason is that
< ?
is used in XML documents and enabling short_open_tags will generate errors in XML codes. But,< ?=
, just like< ?php
is not XML open tag and is safe to use.Only short echo tag (
<?=
) is enabled permanently, not short open tags (<?
). It's because short echo tag is really handy when you're creating HTML templates (or any other view templates) and without that you have to write a lot more (like<?php echo $var; ?>
instead of just<?= $var ?>
).Short open tags are not always enabled since PHP 5.4. The documentation talks about the short echo tags. Which is a different thing. (short open tags are
<?
style tags, short echo tags are<?=
style tags, for echo-ing).Then why are they enabled by default now? Well, there are a lot of scripts out there, where it benefits to use
<?= $somevar ?>
instead of<?php echo $somevar ?>
. And because the short echo tags aren't as bad as the short open tags, they chose to always enable the short echo tags. Because now developers (of frameworks and CMS-es) can count on them (or rather, when PHP 5.4 becomes mainstream).However, the short open tags are still influenced by the
short_open_tag
setting in your php.ini.Note: Starting with PHP 5.4, short echo tag
<?=
is always recognized and valid, regardless of the short_open_tag setting.All that this is saying, is that
<?=
is always valid, and not<?