On Fri, 2008-03-28 at 15:30 +0100, Zoltán Németh wrote:
> 2008. 03. 28, péntek keltezéssel 10.24-kor Robert Cummings ezt írta:
> > On Fri, 2008-03-28 at 14:46 +0100, Zoltán Németh wrote:
> > >
> > > yeah maybe. you're right, the bytecode is the same. but somewhere I
> > > heard that the parsing is the same too - because escaped characters can
> > > be in any string, though I'm not that sure about this anymore, as my
> > > link proved something else ;)
> >
> > Single quoted strings do support some escape characters. As far as I
> > know only you can only escape a single quote and a backslash when
> > creating a string via single quotes.
>
> yes, but I think the parser would still need to tokenize the string and
> verify each token whether it contains an escape character or not - which
> should be the same process as tokenizing and checking for escape
> character and $ signs.
Nope, when processing a single quoted string there should be 4 available
parse branches:
EOF
' (end of string)
\
EOF
\
'
anything else
anything else
Whereas with a double quoted string you have something along the lines
of:
EOF
" (end of string)
$ (begin variable)
{ (possible begin interpolation)
$ (begin interpolation)
\
EOF
\
'
"
t
n
r
x
v
f
<digit>
anything else
anything else
So presuming no variable is embeded and assuming no escaped
characters... double quotes still need to check for the beginning of
variable interpolation which has 2 different start possibilities. With
respect to creating the byte code single quotes have 4 branches, double
quotes have 6 branches in the simplest of cases with no escape and no
interpolation. So one would expect compile time for double quotes to be
approximately 33% slower than for single quotes. Once compiled though,
the point is moot especially since most sites use a bytecode cache like
eAccelerator or APC. Even without a cache htough, the time difference is
teeeeeeeency, and this is just for informational purposes :) There are
usually bigger eggs to fry when optimizing. One last thing though...
even if this were escaped and even if there were fifty variables
embedded, a good bytecode optimizer (not quite the same as a bytecode
cacher) would optimize the bytecode for caching so that the string is
broken up according to what needs to be interpolated and what does not.
Cheers,
Rob.
--
http://www.interjinn.com
Application and Templating Framework for PHP
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php