Newsgroups: php.internals
Path: news.php.net
Xref: news.php.net php.internals:92322
Return-Path: <simon@simon.geek.nz>
Mailing-List: contact internals-help@lists.php.net; run by ezmlm
Delivered-To: mailing list internals@lists.php.net
Received: (qmail 97842 invoked from network); 14 Apr 2016 23:53:13 -0000
Received: from unknown (HELO lists.php.net) (127.0.0.1)
  by localhost with SMTP; 14 Apr 2016 23:53:13 -0000
Authentication-Results: pb1.pair.com smtp.mail=simon@simon.geek.nz; spf=pass; sender-id=pass
Authentication-Results: pb1.pair.com header.from=simon@simon.geek.nz; sender-id=pass
Received-SPF: pass (pb1.pair.com: domain simon.geek.nz designates 128.199.154.101 as permitted sender)
X-PHP-List-Original-Sender: simon@simon.geek.nz
X-Host-Fingerprint: 128.199.154.101 3.91carriage.com  
Received: from [128.199.154.101] ([128.199.154.101:48454] helo=mail.91carriage.com)
	by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP
	id 97/85-64966-A5D20175 for <internals@lists.php.net>; Thu, 14 Apr 2016 19:53:02 -0400
Received: from [10.1.1.5] (unknown [180.200.150.122])
	by mail.91carriage.com (Postfix) with ESMTPSA id 9B7AF1201A9;
	Thu, 14 Apr 2016 19:52:54 -0400 (EDT)
Content-Type: multipart/signed; boundary="Apple-Mail=_F168DBDD-20AE-4D9D-B9E8-0ED37CDFF20B"; protocol="application/pkcs7-signature"; micalg=sha1
Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
In-Reply-To: <CAESVnVpHfkb6yexNN2mZz3Dqv-_4S+yUoyba1Hm+S45NGH+cAg@mail.gmail.com>
Date: Fri, 15 Apr 2016 09:52:51 +1000
Cc: Davey Shafik <davey@php.net>,
 PHP internals <internals@lists.php.net>
Message-ID: <04125064-C4C4-43C1-8EC0-8CD633E3A0F2@simon.geek.nz>
References: <CAESVnVoFQUe7g4DGkszG2gR3gT3EhwEe=+CaUksUcRp0metR2A@mail.gmail.com> <CANaX5nfHZGKwqO=1fvYBoEJjqceLX99FsWheQzH3=cbE5-UW5w@mail.gmail.com> <CAESVnVpHfkb6yexNN2mZz3Dqv-_4S+yUoyba1Hm+S45NGH+cAg@mail.gmail.com>
To: Sara Golemon <pollita@php.net>
X-Mailer: Apple Mail (2.3124)
Subject: Re: [PHP-DEV] Interpolation using ${} syntax with spaces inside the braces
From: simon@simon.geek.nz (Simon Welsh)

--Apple-Mail=_F168DBDD-20AE-4D9D-B9E8-0ED37CDFF20B
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8

> On 15/04/2016, at 9:40 AM, Sara Golemon <pollita@php.net> wrote:
>=20
> On Thu, Apr 14, 2016 at 3:37 AM, Davey Shafik <davey@php.net> wrote:
>> Whitespace inside of { } should not matter, the contents should be =
evaluated
>> as an expression and it's results used to determine the variable =
name, so
>> ${great} should also be $my as in the other cases.
>>=20
> Right.  Which is why I'm conflicted on bug/not-bug/different-bug.
>=20
> IMO, the label inside ${...} should either always be a variable name
> (like HHVM handles it), or always be an expression.  What we have is
> "It's always an expression except in the one specific case of it being
> a valid variable name, in which case that takes precedence.  Since the
> versions containing spaces aren't valid variable names, they fall back
> on the more general expression handling.
>=20
> So I'd be inclined to say "That exception to the rule is the problem",
> except that this is variable interpolation behavior that goes ALL THE
> WAY BACK, and I wouldn't break BC for the world.
>=20
> So the question becomes: What's the right move going forward.  My
> inclination would be to either:
> A: Ignore surrounding whitespace within the ${...} expression.
> Essentially, adopt HHVM's output for these examples.
> B: Throw an error on surrounding whitespace.  This will make
> discovering timebombs like these in existing code easier to catch.
>=20
> In either case, if the programmer actually did want the
> constant->variable double-interpolation, that could be easily achieved
> via "${(foo)}" which disambiguated foo as a variable name from foo as
> an expression.
>=20
> -Sara
>=20
>> Is this related to the use of quotes around string array keys inside
>> strings?
>>=20
>> e.g. "$foo[great]" does not evaluate to $foo['my'] but to =
$foo['great'].
>>=20
> I don't think so... I have a feeling that's yet another weird oddity
> to PHP parsing that's waiting to bite us in new and surprising ways.
>=20
> -Sara

When not inside a string, the inside of the ${...} is always treated as =
an
expression, by both PHP and HHVM (https://3v4l.org/i2kOP), so that looks =
like the
=E2=80=9Ccorrect=E2=80=9D handling for inside a string.

There is also differing behaviour in PHP when using array access, =
depending on if
the label starts with a space or not (https://3v4l.org/YPXkr). This =
behaviour is
inconsistent with not using array access. HHVM follows the <=3DPHP5.5 =
behaviour of
not allowing array access on a constant.

However, there is the massive BC break if the handling inside a string =
changes
--=20
Simon Welsh



--Apple-Mail=_F168DBDD-20AE-4D9D-B9E8-0ED37CDFF20B
Content-Disposition: attachment;
	filename=smime.p7s
Content-Type: application/pkcs7-signature;
	name=smime.p7s
Content-Transfer-Encoding: base64

MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIL4zCCBeIw
ggPKoAMCAQICEGunin0K14jWUQr5WeTntOEwDQYJKoZIhvcNAQELBQAwfTELMAkGA1UEBhMCSUwx
FjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xKzApBgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmlj
YXRlIFNpZ25pbmcxKTAnBgNVBAMTIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
DTE1MTIxNjAxMDAwNVoXDTMwMTIxNjAxMDAwNVowdTELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0
YXJ0Q29tIEx0ZC4xKTAnBgNVBAsTIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSMw
IQYDVQQDExpTdGFydENvbSBDbGFzcyAxIENsaWVudCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAL192vfDon2D9luC/dtbX64eG3XAtRmvmCSsu1d52DXsCR58zJQbCtB2/A5uFqNx
WacpXGGtTCRk9dEDBlmixEd8QiLkUfvHpJX/xKnmVkS6Iye8wUbYzMsDzgnpazlPg19dnSqfhM+C
evdfa89VLnUztRr2cgmCfyO9Otrh7LJDPG+4D8ZnAqDtVB8MKYJL6QgKyVhhaBc4y3bGWxKyXEtx
7QIZZGxPwSkzK3WIN+VKNdkiwTubW5PIdopmykwvIjLPqbJK7yPwFZYekKE015OsW6FV+s4DIM8U
lVS8pkIsoGGJtMuWjLL4tq2hYQuuN0jhrxK1ljz50hH23gA9cbMCAwEAAaOCAWQwggFgMA4GA1Ud
DwEB/wQEAwIBBjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwEgYDVR0TAQH/BAgwBgEB
/wIBADAyBgNVHR8EKzApMCegJaAjhiFodHRwOi8vY3JsLnN0YXJ0c3NsLmNvbS9zZnNjYS5jcmww
ZgYIKwYBBQUHAQEEWjBYMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5zdGFydHNzbC5jb20wMAYI
KwYBBQUHMAKGJGh0dHA6Ly9haWEuc3RhcnRzc2wuY29tL2NlcnRzL2NhLmNydDAdBgNVHQ4EFgQU
JIFsOWG+SQ+PtxtGK8kotSdIbWgwHwYDVR0jBBgwFoAUTgvvGqRAW6UXaYcwyjRoQ9BBrvIwPwYD
VR0gBDgwNjA0BgRVHSAAMCwwKgYIKwYBBQUHAgEWHmh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3Bv
bGljeTANBgkqhkiG9w0BAQsFAAOCAgEAi+P3h+wBi4StDwECW5zhIycjBL008HACblIf26HY0JdO
ruKbrWDsXUsiI0j/7Crft9S5oxvPiDtVqspBOB/y5uzSns1lZwh7sG96bYBZpcGzGxpFNjDmQbcM
3yl3WFIRS4WhNrsOY14V7y2IrUGsvetsD+bjyOngCIVeC/GmsmtbuLOzJ606tEc9uRbhjTu/b0x2
Fo+/e7UkQvKzNeo7OMhijixaULyINBfCBJb+e29bLafgu6JqjOUJ9eXXj20p6q/CW+uVrZiSW57+
q5an2P2i7hP85jQJcy5j4HzA0rSiF3YPhKGAWUxKPMAVGgcYoXzWydOvZ3UDsTDTagXpRDIKQLZo
02wrlxY6iMFqvlzsemVf1odhQJmi7Eh5TbxI40kDGcBOBHhwnaOumZhLP+SWJQnjpLpSlUOj95uf
1zo9oz9e0NgIJoz/tdfrBzez76xtDsK0KfUDHt1/q59BvDI7RX6gVr0fQoCyMczNzCTcRXYHY0tq
2J0oT+bsb6sH2b4WVWAiJKnSYaWDjdA70qHX4mq9MIjO/ZskmSY8wtAk24orAc0vwXgYanqNsBX5
Yv4sN4Z9VyrwMdLcusP7HJgRdAGKpkR2I9U4zEsNJQJewM7S4Jalo1DyPrLpL2nTET8ZrSl5Utp1
UeGp/2deoprGevfnxWB+vHNQiu85o6MwggX5MIIE4aADAgECAhA8c6LxSddlNcS897mGiquOMA0G
CSqGSIb3DQEBCwUAMHUxCzAJBgNVBAYTAklMMRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMSkwJwYD
VQQLEyBTdGFydENvbSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEjMCEGA1UEAxMaU3RhcnRDb20g
Q2xhc3MgMSBDbGllbnQgQ0EwHhcNMTYwMzA1MjI1MzIzWhcNMTcwMzA1MjI1MzIzWjBCMRwwGgYD
VQQDDBNzaW1vbkBzaW1vbi5nZWVrLm56MSIwIAYJKoZIhvcNAQkBFhNzaW1vbkBzaW1vbi5nZWVr
Lm56MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvgfCbp7joFSAuIS7FtryXzcDyAyC
mpe05nUOw6KuSTS6f81x+YNopNb1SSvSah0SkWrkERcPanbUs6pmyamCEXJlWO+7EBhEUH6meFyV
BhhhGcDXW1lbD8uA3v/mbakS3vriKPUnabpT9FgJ7Y/0uB1LdzzisXLFDkceFuBa4AVz3YFIB1eu
SRv0N95E8nF6bepjn8JX1UCvemroCkxB8HA5oPen7bHlGiXPVZ+3e2CDd890bx/5BMa/+bOm8SeX
rMBISxgTuBq36tzPyvvsCULUDzBdq5QsExPvxyIk4Mv9ckIS4vOa6RacTQEEwRtyric+oenWKIbQ
PCJ6eQF2lUZlKgC4loULcK8Ooovbu0e2/6mCcdz5Ef7DD1UcEAaU4G2i/tioaXYWu+szzwcidyzf
C4LbqA4Uwbq62f3QP5EM/b5PRpnG3PVlifipYUkwF5mtXkkkBKMh4SoiC7X25FONzOspXHxzlS20
/8wgPblAwX3KYQLnWoP4ONP2yZ6Wc7vUIWATsyR28BjXnA2ZyLefbkYbU8C1WFqTeai/Slbiqn0X
SQWDVMrindl8My3vJRgBu0vrlbwKLrwksTtIS/cWqfPRdkRkrEXRGjJTRHd5Wdz+TEBaUAVxm6g8
6o3lUXNsUUXJpbMGnQYoruNNeZT3NP0J5QOEYfZlupxipBcCAwEAAaOCAbYwggGyMA4GA1UdDwEB
/wQEAwIEsDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwCQYDVR0TBAIwADAdBgNVHQ4E
FgQUX+ag8zeW/R0C7etTrOqAzeVF340wHwYDVR0jBBgwFoAUJIFsOWG+SQ+PtxtGK8kotSdIbWgw
bwYIKwYBBQUHAQEEYzBhMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5zdGFydHNzbC5jb20wOQYI
KwYBBQUHMAKGLWh0dHA6Ly9haWEuc3RhcnRzc2wuY29tL2NlcnRzL3NjYS5jbGllbnQxLmNydDA4
BgNVHR8EMTAvMC2gK6AphidodHRwOi8vY3JsLnN0YXJ0c3NsLmNvbS9zY2EtY2xpZW50MS5jcmww
HgYDVR0RBBcwFYETc2ltb25Ac2ltb24uZ2Vlay5uejAjBgNVHRIEHDAahhhodHRwOi8vd3d3LnN0
YXJ0c3NsLmNvbS8wRgYDVR0gBD8wPTA7BgsrBgEEAYG1NwECBDAsMCoGCCsGAQUFBwIBFh5odHRw
Oi8vd3d3LnN0YXJ0c3NsLmNvbS9wb2xpY3kwDQYJKoZIhvcNAQELBQADggEBAEfnrAybyS5i+Gpp
4J3C5sbwoDnNH05Ss3B8sOAD7VjDvNAVjUG48iIBhpt17GfsZbXDI5EBkT9jHVXTUnmDH9IzBTXa
yOL5/rcfV8JDuhkZZnUrkBJKDe6xCtbTibleTaDTRXXpEoCHrG1GS9D4wW5ObO2vMZ8uKg2lqp4V
L2rLw7S0VHDddRM4No2m3UFTEEEywcoA9kv+ueqQ3PwZyaocqdbK2uv4baGnjneYG16SIgInEwsO
Sl3sEE7BDdD4o/6D70ssworEvbbuXCk0XWUocD4pUfoCy7K7PncLWmJ+FUAsxNiQkUOxXbUmUBfV
lJPFy+LY3Tbxjmc/9irMzkAxggROMIIESgIBATCBiTB1MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
U3RhcnRDb20gTHRkLjEpMCcGA1UECxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
IzAhBgNVBAMTGlN0YXJ0Q29tIENsYXNzIDEgQ2xpZW50IENBAhA8c6LxSddlNcS897mGiquOMAkG
BSsOAwIaBQCgggGZMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTE2
MDQxNDIzNTI1MlowIwYJKoZIhvcNAQkEMRYEFE5tGRdjEKcoWnoyd+e5p3+zSeMDMIGaBgkrBgEE
AYI3EAQxgYwwgYkwdTELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xKTAnBgNV
BAsTIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSMwIQYDVQQDExpTdGFydENvbSBD
bGFzcyAxIENsaWVudCBDQQIQPHOi8UnXZTXEvPe5hoqrjjCBnAYLKoZIhvcNAQkQAgsxgYyggYkw
dTELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xKTAnBgNVBAsTIFN0YXJ0Q29t
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSMwIQYDVQQDExpTdGFydENvbSBDbGFzcyAxIENsaWVu
dCBDQQIQPHOi8UnXZTXEvPe5hoqrjjANBgkqhkiG9w0BAQEFAASCAgADzaLWnNDyn3vdoebYdY3c
ayxMvuHAv9sdcXSjRcS7sScmPR6K4E9YcwdUaP1A1/xMDA78swHe+E7SdYR2rlza1yWE0JQE4yQd
GzEPwuF5xTtr82QVVX+W8tO7+/WIEIU+gDAsQoONol3a5sa+QEdEqJg9WcdJpl5xbIA8GE2ldoLh
ykWBSwc0uPI4eVot10ICRygVg9/AjJO1sdwMXIuh+xCGhUGBckuk7IVpFKkTZZbbRO9fENzbEVfU
+YmwZvC7V+5dSNkPZvK8mOWDBs006eYaZ+xAG5k+bsZDrVckmV9w4Wie+pcKCNB41hkH3UvQ4kRW
KmgNJgm/wFuB6BHsW1ZrRwaOBS6jEX3BPXMGiDCXL5hhESKNj8f5ei9pgRpHKbtmSmfe+ZoaSR0U
Yp2E1EANLfOGHzdLK1upgNJxa35muhkta0uuDM6EKhuoUBHFohhtm5MTDazNbQwDMsgc9tUG41PP
8qrq7YtyblP7Qkgkpl09QLmrqfH5JjAzvUfP1ZOEZDJMQ2T3MbCwscmjC/DJaB9l9+qkEciamBqQ
ASkqPV1YyNWksqxYO5Q0fAH4PfUjRgZB/f+L+qfmSnm67n2qgbVS45Xdt2dNQEGpBZNlTVpzUrTz
MDXdPfr14VQS9I9XARrb3ka4zgMxacDyL/M5hc1e9skSFveyLBgDfwAAAAAAAA==
--Apple-Mail=_F168DBDD-20AE-4D9D-B9E8-0ED37CDFF20B--