Bug #72817 [Com]: array null index silently casts to empty string
| From: | php at abiusx dot com | Date: | Thu, 11 Aug 2016 20:42:20 +0000 |
| Subject: | Bug #72817 [Com]: array null index silently casts to empty string | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-203197@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=72817&edit=1
ID: 72817
Comment by: php at abiusx dot com
Reported by: php at abiusx dot com
Summary: array null index silently casts to empty string
Status: Open
Type: Bug
Package: Variables related
Operating System: OS X 10.11
PHP Version: 7.0.9
Block user comment: N
Private report: N
New Comment:
$a[false]=5 is equal to $a[0]=5
and
$a[true]=5 is equal to $a[1]=5
so why $a[null]=5 is $a[""]=5? Why do we even allow empty string indexes in an array!?
Previous Comments:
------------------------------------------------------------------------
[2016-08-11 20:39:19] php at abiusx dot com
Description:
------------
Accessing an array will a null index is equal to accessing it with an empty string index, which is
non-trivial and cause of many errors in applications.
When a developer writes
$a[$index]=5;
They typically expect $index to be an index (regardless of type) and not null. But if it is null,
the command still works and is equal to:
$a[""]=5; //same as $a[null]=5;
There is no trivial reason why null should cast to empty string, rather than say 0 or any other
equivalent form. And this behavior typically should cause warnings or notices (although it breaks
BC).
Test script:
---------------
$a=[];
$a[]=4;
$a[null]=5;
$a[]=6;
var_dump($a);
Expected result:
----------------
E_NOTICE, E_WARNING or $a[0]=5, but not $a[""]=5
Actual result:
--------------
array(4) {
[0]=>
int(4)
[""]=>
int(5)
[1]=>
int(6)
[2]=>
int(7)
}
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=72817&edit=1