Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:92322 Return-Path: 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 ; 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: Date: Fri, 15 Apr 2016 09:52:51 +1000 Cc: Davey Shafik , PHP internals Message-ID: <04125064-C4C4-43C1-8EC0-8CD633E3A0F2@simon.geek.nz> References: To: Sara Golemon 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 wrote: >=20 > On Thu, Apr 14, 2016 at 3:37 AM, Davey Shafik 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--