I've been giving some thought to the implication of my off the cuff addition
of PHP_TAGS_NONE to the modes allowed and what should logically go with
that. If tag style can be declared in a function, it should be possible set
them in the configuration and at other places. Currently tag style is spread
over multiple settings in the configuration - I know of two:
asp_tags
short_open_tag
This is problematic moving forward so I hereby suggest nipping further
proliferation in the bud and go to one configuration setting with this name:
tag_style
It's values, and their corresponding meaning:
Val Constant Effect
0 PHP_TAGS_LEGACY Honor older ini tag settings such as asp_tags
or short_open_tag, in all ways behave in a
a manner compliant with the expectations of
any scripts that are upgrading.
1 PHP_TAGS_NONE No tags will be permitted in the file.
Interpreter expects the whole file to be
PHP.
2 PHP_TAGS_STANDARD Enable the classic <?php ?> tags we all know
and love.
3 PHP_TAGS_SHORT Use PHP short tags <? ?> and <?= ?>. Unlike
Legacy behavior with short_open_tag set to
'on' this setting will NOT let you use
<?php ?> alongside the <? ?> and <?= ?>
tags.
4 PHP_TAGS_SCRIPT Script tags <script type="php"></script>
5 PHP_TAGS_ASP ASP style tags <% %>
And so a script could have an .htaccess file with
php_flag php_tags 1
So the first file the webserver reads in doesn't have to have any opening
tag at all. This would put a stop to the puzzlement of "Why am I getting an
error when I call header()" which I see on programming boards at least once
a week.
The constants above can in turn be coupled to my original recommendation
that include, include_once, require, and require_once each be allowed to
have a second parameter. The default value of the second parmeter is
whatever php_tags is set to at the time the include statement is parsed.
Hence, unlike the current situation with short_open_tag and asp_tag,
php_tags can be changed at runtime using ini_set. The only catch is the
change only affects includes which occur after the setting change.
I believe strongly that this improved recommendation improves the
interoperability of tag styles without creating backwards compatibility
issues or creating future problems. As for the secondary suggestion I made,
allowing namespaces to be specified in the include statement, I'll drop that
from this recommendation to focus on the changes to tag style setting.