Re: Notice on non existing array key (on a boolean)
| From: | Christoph Becker | Date: | Tue, 25 Aug 2015 15:09:10 +0000 |
| Subject: | Re: Notice on non existing array key (on a boolean) | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-87913@lists.php.net to get a copy of this message | ||
On 25.08.2015 at 15:48, Sherif Ramadan wrote:
> You're right. The notice is triggered by array_push behavior only, which
> means that $x = true; echo $x['foo']; doesn't trigger the notice, which is
> the same as your code above. Only write operations have historically
> resulted in this notice.
>
> I would agree that providing the notice would help someone debugging
> potentially buggy code like this. Not sure if this is something we can
> squeeze into 7.0.0 release at this point, but I would consider it a bug fix
> with BC rather than something that should be subject to current feature
> freeze.
See also <https://bugs.php.net/bug.php?id=54556>.
> On Tue, Aug 25, 2015 at 9:35 AM, Nicolai Scheer <nicolai.scheer@gmail.com>
> wrote:
>
>> Hi all,
>>
>> I'd expect the following code to throw a notice/warning:
>>
>> $x = true;
>> $y = $x['foo'];
>>
>> It executes completely silently.
>> $y is NULL afterwards, which is expected, since the right hand side of
>> the assignment is undefined.
>>
>> If $x was an array (e.g. empty array), a E_NOTICE would be emitted.
>>
>> Can anyone shed a light on this behaviour? If accessing non existing
>> array keys is worth a notice, shouldn't accessing an array index on a
>> non array be worth a notice as well (maybe even a warning)?
>>
>> The other way round emits a warning (i.e. writing to an array key on a
>> non array):
>>
>> $x = true;
>> $x['foo'] = 'bar';
>>
>> Warning: Cannot use a scalar value as an array ...
>>
>> Thanks for any insight,
--
Christoph M. Becker