#20601 [Opn->Csd]: A simple syntax parse error

From: Date: Thu, 23 Jan 2003 00:00:28 +0000
Subject: #20601 [Opn->Csd]: A simple syntax parse error
References: 1  Groups: php.doc 
Request: Send a blank email to phpdoc+get-969351197@lists.php.net to get a copy of this message
ID: 20601 Updated by: philip@php.net Reported By: mort@dsl.pipex.com -Status: Open +Status: Closed Bug Type: Documentation problem Operating System: Windows ME PHP Version: 4.3.0RC1 Assigned To: philip New Comment: Thanks for the report, the documentation has been updated here: http://cvs.php.net/cvs.php/phpdoc/en/language/types.xml On a related note, this may end up not being a parse error in the future. The documentation will be updated once a verdict is made on bug #21820 so hold tight :) Previous Comments: ------------------------------------------------------------------------ [2002-12-17 10:51:18] philip@php.net Sort of. This is a feature I was not aware of in PHP and imho is sort of a bug :) As it turns out, constants are only seen in strings if: a) It's an array key b) {braces} are around the array So for example, NO E_NOTICE is generated from "a $arr[foo]" but "a {$arr[foo]}" does! And btw, "a {foo}" does not look for the constant foo. And because multidimensional arrays inside strings require {braces} this is an important point. IMHO this behavior of constants inside strings is inconsistent and I'm writing php-dev now! :) ------------------------------------------------------------------------ [2002-12-17 10:37:35] goba@php.net Philip, please do not change that part of the documentation. **It is correct!**. Try with this script: <?php error_reporting(E_ALL); ini_set("display_errors", TRUE); $arr['foo'][3] = 14; echo "This is wrong: {$arr[foo][3]}"; echo "This is good: {$arr['foo'][3]}"; ?> For the first echo line, a NOTICE error is echoed out... So the documentation is correct. It may not be clear enough, but it is correct, the example is right. ------------------------------------------------------------------------ [2002-12-05 13:49:27] philip@php.net As it turns out, the string docs are wrong and contain the following in the example: // This is wrong for the same reason // as $foo[bar] is wrong outside a string. echo "This is wrong: {$arr[foo][3]}"; I'll rewrite this part of the documention too. $foo[bar] is perfectly fine inside strings, CONSTANTS aren't seen in strings. Anyway, this will be further explained with a more specific example too. And a faq entry :) This question comes up waaaaaaay too much these days. ------------------------------------------------------------------------ [2002-12-05 13:26:22] goba@php.net The string type description includes a lengthy explanation of this AFAIK. ------------------------------------------------------------------------ [2002-12-04 19:03:14] philip@php.net Btw, this happens when you do: print "a foo $bar['blah'] eh"; Don't do that. You can do either: print "a foo {$bar['blah']} eh"; print "a foo $bar[blah] eh"; print "a foo " . $bar['blah'] . " eh"; But when outside of strings always quote your keys: print $bar[blah]; // bad print $bar['blah']; // good Unless of course you defined blah as a constant earlier. Anyway I'm making a faq out of this question and marking as a doc bug because this question comes up a lot especially since 4.1.0 (autoglobals) and 4.2.0 (register_globals default change). ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/20601 -- Edit this bug report at http://bugs.php.net/?id=20601&edit=1

« previous php.doc (#969351197) next »