Re: [Proposal] Modification to ?: functionality
| From: | Chris London | Date: | Tue, 26 Nov 2013 16:58:06 +0000 |
| Subject: | Re: [Proposal] Modification to ?: functionality | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-70410@lists.php.net to get a copy of this message | ||
On Tue, Nov 26, 2013 at 8:15 AM, Mats Lindh <mats.lindh@gmail.com> wrote:
> On Tue, Nov 26, 2013 at 3:43 PM, Chris London <me@chrislondon.co> wrote:
>
>> I believe these two statements are functionally equivalent:
>>
>> $foo = $foo ? $foo : 'default';
>>
>> $foo = $foo ?: 'default';
>>
>
> They are.
>
>
> I would like to change it so it also checks for isset() so I propose the
>> following would be functionally equivalent:
>>
>> $foo = isset($foo) && $foo ? $foo : 'default';
>>
>> $foo = $foo ?: 'default';
>>
>
> The would break the assumption that a reference to an uninitialized value
> would generate a notice, unless explicitly handled in the logic.
>
> While I also would like to have something similar to ?: to handle default
> values for array keys, etc., this would change a fundamental assumption
> that as been in place for many years now. I'm not sure if that's a BC break
> that would be acceptable this late. An alternative operator may be more
> suitable.
>
What do you think about using:
$foo = $foo @: 'default';
and possibly
$foo @= 'default';
>
> The change proposed has also been discussed several times since the
> implementation of ?:. See the ifsetor-RFC:
>
> https://wiki.php.net/rfc/ifsetor
>
> It also contains links to the discussion around the feature back then.
>
> --mats
>