php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Doc Bug #44821 Accessing NULL as an Array does not produce error
Submitted: 2008-04-24 16:46 UTC Modified: 2016-12-30 16:00 UTC
Votes:4
Avg. Score:3.5 ± 0.9
Reproduced:2 of 2 (100.0%)
Same Version:2 (100.0%)
Same OS:2 (100.0%)
From: mcarpent at zenwerx dot com Assigned: cmb (profile)
Status: Closed Package: Arrays related
PHP Version: 5.2.5 OS: Windows XP
Private report: No CVE-ID: None
 [2008-04-24 16:46 UTC] mcarpent at zenwerx dot com
Description:
------------
Accessing a null value as an array does not produce an error or even a warning. It resolves to null and the script continues.

Reproduce code:
---------------
<?php

$foo = null;
echo "Foo: {$foo['bar']}";

$foo = array();
echo "Foo: {$foo['bar']}";

?>

Expected result:
----------------
Notice: Undefined index: bar in c:\test\test.php on line 4
Foo: 
Notice: Undefined index: bar in c:\test\test.php on line 7
Foo: 

Actual result:
--------------
Foo: 
Notice: Undefined index: bar in c:\test\test.php on line 7
Foo: 

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2008-04-24 16:50 UTC] mcarpent at zenwerx dot com
At least this is my understanding from the Array documentation which states: Converting NULL to an array results in an empty array.

If this is the case and the NULL is converted to an empty array, should PHP not display a notice for the undefined index.
 [2008-04-24 16:59 UTC] florian dot ember at gmail dot com
http://php.net/language.types.string#language.types.string.substr
"Note: Accessing variables of other types using [] or {} silently returns NULL."

Typecasting only happens when you explicitly do it with (array).
 [2008-04-24 17:14 UTC] mcarpent at zenwerx dot com
The string example was only used for testing after I found this particular issue.

Real code was more like this:

function returnNull() {
    return NULL;
}

$foo = returnNull();

// Resolves to null, therefore always false
if ($foo['SomeIndex'] == 1) {
    // Never reached
}

This was a programmer error since it should have been checked for failure (null), but was left uncaught until the code was changed so that the function, which should return an array, returned an empty array instead of null to signify failure.

If this is behaviour by design, it would be helpful for the documentation about silently casting the object to null to be located elsewhere as well. I would have never considered looking under the string documentation for an array issue.
 [2008-11-05 17:02 UTC] vrana@php.net
It is properly documented: "Converting NULL to an array results in an empty".
 [2013-08-21 23:58 UTC] matteosistisette at gmail dot com
"It is properly documented: "Converting NULL to an array results in an 
empty"."

THAT's WRONG!!
And both the original report and the first comment already point this out.


Accessing a non-existing key of an empty array produces an E_NOTICE, 
Hence, if you try to access a key of null, and null was converted to an empty 
array, you would be accessing an element of an empty array, and hence you should 
get an E_NOTICE. But you don't.

This IS a bug. Or a documentation problem if there is a good reason (which I 
cannot see) for such an absurd behavior.
It is definitely not as documented.

Compare these:

  $arr=array();
  echo $arr['lsjsdfjls']; // issues an E_NOTICE

  $arrb=null;
  echo $arrb['losjfbls']; // doesn't issue an E_NOTICE


This made me waste a day debugging.
 [2013-08-21 23:59 UTC] matteosistisette at gmail dot com
Forgot to mention: NEEDS TO BE REOPENED
 [2016-12-30 16:00 UTC] cmb@php.net
-Status: Not a bug +Status: Closed -Package: Documentation problem +Package: Arrays related -Assigned To: +Assigned To: cmb
 [2016-12-30 16:00 UTC] cmb@php.net
This behavior has been documented in the meantime, see
<http://svn.php.net/viewvc?view=revision&revision=339937>.

Note that there's request #37676, which is about changing this
behavior.
 
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Tue Oct 15 03:01:28 2019 UTC