Hi Matt,

On Tue, Jun 9, 2015 at 7:04 PM, Matt Wilmas <php_li...@realplain.com> wrote:

> Hi all,
>
>
> ----- Original Message -----
> From: "Yasuo Ohgaki"
> Sent: Tuesday, June 09, 2015
>
>  Hi all,
>>
>> On Tue, Jun 9, 2015 at 6:21 AM, Stanislav Malyshev <smalys...@gmail.com>
>> wrote:
>>
>>  > Would throwing a notice or a warning on array deferencing scalars
>>> > be acceptable for PHP 7.0, or does this need an RFC?
>>>
>>> I think this does need an RFC, and for 7.0, pretty much no new language
>>> changes are acceptable anymore, since we're past the timeframe.
>>>
>>
>>
>>  <?php
>>  $foo = 42;
>>  $foo['bar']; // => NULL
>>
>> This code cannot be right.
>> How about fix this as a simple bug?
>>
>
> I just realized this behavior a couple months ago, after being annoyed by
> "needing" to use isset() to avoid a Notice in rare cases.  (I've always
> hate, hate, hated the isset() mess just trying to assign stuff -- I wanted
> a value-returning IFset() instead!  Now we have ??, but still can't do
> var_dump($var ??).)
>
> Anyway, I realized after checking the code that this is actually
> intentional and always has been, it seems.  Really glad that I could rely
> on this and it makes things simpler and cleaner! :-)
>
> Note that I'm referring to accessing NULL as an array (that I'd like to
> rely on).  The other bool/int scalar without-a-notice case did/does seem a
> bit odd.
>
> So if there's a change, how about only changing it for non-NULL values?
> Otherwise, this:
>
> $v = NULL; $v[0][1][2][3][4][5][6][7][8][9];
>
> is supposed to give 10 Notices?!  That's dumb, and ugly, and looks like
> what the Pull Request is doing with the updated tests.  Even worse in the
> case where the variable is undefined...
>

I fully agree that current behavior could be used meaningful ways. However,

 <?php
 $foo = 42;
 $foo['bar']; // => NULL
 $v = NULL;
 $v[0][1][2][3][4][5][6][7][8][9]; // NULL

this code is semantically wrong and I would like to have error/exception
for such
erroneous codes. It's inconsistent with array object, too.

Raising exception/error is correct behavior for types that aren't array.
To avoid errors, users should use isset()/is_array()/etc.

Since we have debate for this PR, this PR would be good for RFC targeting
PHP 7.1.

Regards,

--
Yasuo Ohgaki
yohg...@ohgaki.net

Reply via email to