36
votes

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?

4
If I read php.net/manual/en/language.basic-syntax.phpmode.php correctly, your question isn't quite correct - <?= (short-tag echo) is always enabled, but other short tag usages aren't (untested). Still, I'd be interested to know the reasoning for that change as well.John Carter
That's not what it says. All it says is the <?= which is equivalent to <?php echo ...?> is always available.Cfreak
The original reasoning for introducing the config option for short tags was that some sheople had the unsuppressible urge to mix PHP into XML files, where <? clashed with <?xml. Now it was uncovered that most XML editors that people appearantly use for editing PHP files don't bail when encountering <?= or so.mario
@mario that would make sense, do you have a link to a relevant dev mailing list discussion or similar?John Carter
Here's the RFC wiki.php.net/rfc/shortags , which seems to confirm what @mario says.John Carter

4 Answers

43
votes

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.

4
votes

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 ?>).

2
votes

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 <?

2
votes

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.