On Sat, Feb 26, 2022 at 11:34 PM Robert Landers <landers.rob...@gmail.com>
wrote:

> On Sat, Feb 26, 2022 at 5:35 PM Mark Randall <marand...@php.net> wrote:
>
>> On 26/02/2022 09:09, Robert Landers wrote:
>> > I'd like to propose and implement an RFC that would consider dropping
>> the
>> > warning if and only if array access is the only test in ternary and
>> short
>> > ternary (?:) operations but first I'd like to start a discussion to see
>> if
>> > it is worth pursuing. I'd like to target PHP 8.2 or 8.3.
>>
>> The warning comes from the array key being missing, not from being
>> empty. There are many values which are empty which do not emit the
>> warning.
>>
>> If you want to provide a default should the array key be missing you
>> want null coalesce.
>>
>> $x = $array['foo'] ?? 'somethingelse';
>>
>>
> This is not semantically the same though. A $_POST of a form, for example,
> will usually contain an empty value if the form input was empty, but
> missing if the form control wasn't in the form (maybe the form control is
> injected via Javascript, or conditionally output by the script).
>
> Here is how the code might look currently to handle a default value for an
> empty form post that may or may not be sent in the request (ignoring how
> insecure this looks):
>
> $name = $_POST['name'] ?: 'Default Name';
>
> Semantically the same to get rid of the warning:
>
> $name = empty($_POST['name']) ? 'Default Name' : $_POST['name'];
>
> I'm not sure your suggestion to set a default applies since we have to do
> the empty check anyway, which swallows the warning?
>
> $name = empty($_POST['name'] ?? 'Default Name') ?: 'Default Name';
>

The fact that I just wrote ^^ that bug only to realize as soon as I sent it
should underscore how error-prone this migration could be.



>
>
>>
>> --
>> PHP Internals - PHP Runtime Development Mailing List
>> To unsubscribe, visit: https://www.php.net/unsub.php
>>
>>
> Robert Landers
> Software Engineer
> Utrecht NL
>
>
>

Reply via email to