ID: 40692 User updated by: smlerman at gmail dot com Reported By: smlerman at gmail dot com Status: Open Bug Type: Feature/Change Request Operating System: Any PHP Version: 5.2.1 New Comment:
Here's another test case that shows that something isn't quite right with implicit conversions. <?php var_dump(error_reporting()); $a = 12345; var_dump($a[0]); // Should cast to string or possibly array var_dump($a{0}); // Should cast to string $b = (string)$a; var_dump($b[0]); $c = (array)$a; var_dump($c[0]); ?> Results: int(8191) NULL NULL string(1) "1" int(12345) So $a isn't being converted to a string or array if you do $a[0]. It also isn't converted to a string if you do $a{0}, and I have no idea what else it could reasonably convert to. I never rely on these implicit conversions, so I have no real personal interest in whether the behavior stays the same as it is now or if the conversions are fixed, but some kind of error message, even a notice for an undefined index for something like $a['foo'], would help with debugging this kind of programmer mistake. Previous Comments: ------------------------------------------------------------------------ [2007-03-05 00:22:42] smlerman at gmail dot com Actually, as my code shows, you do not get false, you get NULL, so it's obviously not doing a normal conversion to an array. I'm not disputing the value of the expression, since it makes perfect sense to me that the value of a non-existent variable should be NULL. In all other cases, though, it also gives a notice, which is what would be nice to have. ------------------------------------------------------------------------ [2007-03-05 00:10:28] [EMAIL PROTECTED] Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php (string)false == "" "" does not have offset 0 and therefor you get a warning message. (array)false == array(0 => false); and when you access element 0 of this array you get false in return. ------------------------------------------------------------------------ [2007-03-03 16:57:17] smlerman at gmail dot com Yeah, in 6 years of programming PHP, I never noticed that it isn't a strictly typed language. Trying to use an undefined offset of an array gives an error message. Trying to use a non-existant character index of a string gives an error message. So what is the boolean being converted to such that using an incorrect offset isn't an error? ------------------------------------------------------------------------ [2007-03-03 15:58:22] [EMAIL PROTECTED] Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php PHP is not type strict. ------------------------------------------------------------------------ [2007-03-02 16:20:40] smlerman at gmail dot com Description: ------------ If you try to use a boolean as an array (which most likely means an error occurred somewhere), the value is correctly returned as NULL, but no error message is reported. Obviously not a major problem, but it would make debugging a little easier. Reproduce code: --------------- <?php var_dump(error_reporting()); $a = false; var_dump($a[0]); $b = (string)$a; var_dump($b[0]); ?> Expected result: ---------------- int(8191) [Something like] Notice: Cannot use boolean as array in C:\Documents and Settings\...\boolean_array.php on line 5 NULL Notice: Uninitialized string offset: 0 in C:\Documents and Settings\...\boolean_array.php on line 8 string(0) "" Actual result: -------------- int(8191) NULL Notice: Uninitialized string offset: 0 in C:\Documents and Settings\Scott\My Documents\Test Files\boolean_array.php on line 8 string(0) "" ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=40692&edit=1