php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Doc Bug #16763 '<?=', and '<%=' are equivalent to echo, but '<?php=' is not
Submitted: 2002-04-23 15:05 UTC Modified: 2002-05-24 15:09 UTC
Votes:4
Avg. Score:5.0 ± 0.0
Reproduced:4 of 4 (100.0%)
Same Version:1 (25.0%)
Same OS:2 (50.0%)
From: tbrinkman at cinci dot rr dot com Assigned:
Status: Not a bug Package: Documentation problem
PHP Version: 4.2.0 OS: ALL
Private report: No CVE-ID: None
 [2002-04-23 15:05 UTC] tbrinkman at cinci dot rr dot com
Seeing as how '<?=' and '<%=' are both equivalent to '<?php echo', I kind of figure that '<?php=' should also be equivalent, but it is not.

Having run into this before, I asked about it and somebody told me it was in the works to get taken care of for 4.2.0.  I checked and it doesn't seem to be fixed, so I decided to do a bit of hunting to see if it was within my capabilites.  I *think* I've found the changes which need to be made, but I'm not absolutely certain.

Having searched through all of the source code for all occurrances of '<%=' and '<?=', I discovered that they only exist (outside of comments) in one source file.

That said, I *believe* that the following changes to php-4.2.0\Zend\zend_language_scanner.l would cause '<?php=' to become equivalent to '<?php echo' just as the other, shorter tags allow.

I don't know how to make an actual patch file, or where to submit it so here goes.  First is the two-line change to zend_language_scanner.l that would seem to enable the shorthand.  Second is the one-line change to zend_language_scanner.c (just in case the two have to be maintained seperately).
This should be easily back-portable to previous code trees.

file: php-4.2.0\Zend\zend_language_scanner.l;
replace: lines 941-942;
- - - - - START - - - - -
<INITIAL>"<%="|"<?="|"<?php=" {
	if ((yytext[1]=='%' && CG(asp_tags)) || (yytext[1]=='?' && CG(short_tags)) || (yytext[1]=='?' && yytext[2]=='p' && yytext[3]=='h' && yytext[4]=='p')) {
- - - - - STOP - - - - -

file: php-4.2.0\Zend\zend_language_scanner.c;
replace: line 4086;
- - - - - START - - - - -
	if ((yytext[1]=='%' && CG(asp_tags)) || (yytext[1]=='?' && CG(short_tags)) || (yytext[1]=='?' && yytext[2]=='p' && yytext[3]=='h' && yytext[4]=='p')) {
- - - - - STOP - - - - -

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2002-04-23 15:22 UTC] jimw@php.net
this was discussed to death on php-dev. it's not going to happen.
 [2002-04-25 17:36 UTC] tbrinkman at cinci dot rr dot com
Do you mind if I ask why not?  It's half-way implemented as it stands.  Both of the 'short form' tags support the behavior, what was the reasoning behind not supporting it in the 'long form' tag?

Other than Rasmus's claim that he '...can't think of anything uglier and less sensical...".  If that was the reason for not fully supporting the form, why was it partially implemented in the first place?
 [2002-04-25 19:13 UTC] yohgaki@php.net
I porposed the same thing monthes ago. I agree. It's strange not to have <?php= since <?php tag is the only portable tag.

Anyway, in PHP, there are too many inconsistency to note and it's one of them.


 [2002-04-25 19:27 UTC] rasmus@php.net
Removing <?= would also improve consistency.

I don't buy the consistency argument.
 [2002-04-25 20:09 UTC] yohgaki@php.net
Removing <?= and <%= works, too ;)

We are sure now. There will be people curious about not having <?php=, since there are <?= and <%=.

It looks we are better to document about echo short cut, explicitly.


 [2002-04-26 11:16 UTC] tbrinkman at cinci dot rr dot com
Actually, removing <?= wouldn't improve consistency unless you also removed <%=.  Nobody, it seems, is actually willing to remove the short hand, so the only way to improve consistency is to support it in all three cases.  People who don't like the shorthand method will continue to act as if it doesn't exist.  People who do like the shorthand method will no longer have to write code using an optional tag style which requires an ini setting which is NOT set on every(or even most?) servers.
 [2002-04-26 11:20 UTC] goba@php.net
> People who do like the shorthand method
> will no longer have to write code using an
> optional tag style which requires an ini
> setting which is NOT set on every(or
> even most?) servers.

..and which tag is not XML safe. BTW <?php=$var?> is
still not XML safe, so this is not a real argument ;)
XML 1.0 specifies PIs:

'<?' PITarget (S (Char * ...

which means, that a space is needed after PITarget
(which is php in this case).
 [2002-04-26 11:21 UTC] goba@php.net
Erm, my prev not was not intended to be against this new <?php=?> form, I just intended to add some more info ;)
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Fri Apr 19 21:01:30 2024 UTC