Bug #76294 [Nab]: Variable expansion taking place into string when using undefined constant.

From: Date: Wed, 02 May 2018 11:41:31 +0000
Subject: Bug #76294 [Nab]: Variable expansion taking place into string when using undefined constant.
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-215011@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=76294&edit=1 ID: 76294 User updated by: dpastor at comvive dot es Reported by: dpastor at comvive dot es Summary: Variable expansion taking place into string when using undefined constant. Status: Not a bug Type: Bug Package: *General Issues Operating System: Ubuntu Linux 64 PHP Version: 7.2Git-2018-05-02 (Git) Block user comment: N Private report: N New Comment: Good to see this is stirring discussion ;). I just thought, what if... --------------- <?php $friends="friends"; $countries['mexico']="land of the good people"; $countries['guatemala']="land of the guatemaltecans"; define('mexico', 'guatemala'); echo $countries[mexico]; $greet="Hi $friends, welcome to $countries[mexico]"; echo $greet; ----------------- Clearly the first echo will result in "land of the guatemaltecans". To an outsider, it will be a mistery why the second one (being extremely similar tokens) results in a welcome to Mexico. Of course, it is reasonable to state that an understanding of how PHP works is necessary to tackle this subject, but I just found this amusing. Previous Comments: ------------------------------------------------------------------------ [2018-05-02 11:35:25] requinix@php.net 30 minutes ago you said > this code is simply wrong > $greet="Hi $friends, welcome to $countries[mexico]"; That is incorrect: the code is fine. Then you said > this one does what you think the above does > $greet="Hi $friends, welcome to {$countries[mexico]}"; I thought you were trying to say that code would work (incorrect), but now I think I misunderstood and you were trying to say that it will give the warning that @dpastor was expecting to see (correct). And yes, your example output does demonstrate the "complex syntax requires quotes like you want" I said earlier. And yes, the bug report is about there not being a warning for the simple syntax. What I said earlier addresses that. ------------------------------------------------------------------------ [2018-05-02 11:28:52] spam2 at rhsoft dot net and that's what this bugreport is about: "Warning: Use of undefined constant mexico - assumed 'mexico'" missing php > echo "welcome to $countries[mexico] test"; welcome to MEXICO test ------------------------------------------------------------------------ [2018-05-02 11:24:28] spam2 at rhsoft dot net nonsense - i have thousands lines of code in the style of " {$arr['whatever']} " and as you can see below it's correct php > $countries = ['mexico'=>'MEXICO']; php > echo "welcome to {$countries['mexico']} test"; welcome to MEXICO test php > echo "welcome to {$countries[mexico]} test"; Warning: Use of undefined constant mexico - assumed 'mexico' (this will throw an Error in a future version of PHP) in php shell code on line 1 welcome to MEXICO test php > ------------------------------------------------------------------------ [2018-05-02 11:07:39] requinix@php.net "$countries[mexico]" is fine. "{$countries[mexico]}" is not. https://3v4l.org/mfjOY ------------------------------------------------------------------------ [2018-05-02 11:03:33] spam2 at rhsoft dot net this code is simply wrong $greet="Hi $friends, welcome to $countries[mexico]"; this one does what you think the above does $greet="Hi $friends, welcome to {$countries[mexico]}"; ------------------------------------------------------------------------ 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 https://bugs.php.net/bug.php?id=76294 -- Edit this bug report at https://bugs.php.net/bug.php?id=76294&edit=1

« previous php.bugs (#215011) next »