Thus, can you provide any other dangerous example?

On Wed, Nov 4, 2020, 6:59 AM Eugene Sidelnyk <zsidel...@gmail.com> wrote:

> But wait!
>
> In your example, funds won't get detracted. If `$accounts->get($receiver)`
> will return `null`, then everything inside `addFunds(...)` will not be
> executed.
> Your example (simplified): https://3v4l.org/38Dk3
>
> Another one:
> ```php
> function expensive_function() {
>     var_dump(__FUNCTION__);
> }
>
> $foo = null;
>
> $foo?->baz(expensive_function());
> ```
>
> On Tue, Nov 3, 2020 at 10:11 PM Marco Pivetta <ocram...@gmail.com> wrote:
>
>> Heya,
>>
>> On Tue, Nov 3, 2020, 17:38 Eugene Sidelnyk <zsidel...@gmail.com> wrote:
>>
>>> Hello, internals!
>>> I am wondering why don't we use ordinary `->` operator with safe null
>>> handling? Programmers will be more prone to return null values. And thus,
>>> in most of cases `?->` will replace `->`.
>>> Why do we need another operator, if we can implement null safe in current
>>> operator without BC breaks?
>>>
>>
>> Overall, "null safe" can be very dangerous if made the default.
>>
>> Here's a scenario where I'd never want "null safe" behaviour (which does
>> anything but introducing safety):
>>
>> ```php
>> $accounts->get($receiver)
>>     ->addFunds(
>>         $accounts->get($sender)
>>             ->detractFunds($amount)
>>     );
>> ```
>>
>> In the above scenario, if the first `$accounts->get()` call returns
>> `null` for any reason, you may actually destroy money (funds detracted, but
>> never added to another account).
>>
>> The example is simplistic, but it shows that "null safe" is everything
>> but "safe", and it must instead be used only where it absolutely makes
>> sense to suppress null reference errors.
>>
>> Similar behaviour can be observed around cast operators, which are too
>> lax for most businesses logic:
>> https://github.com/ShittySoft/symfony-live-berlin-2018-doctrine-tutorial/pull/3#issuecomment-460441229
>>
>> Safe = crashes when it should crash.
>>
>>>

Reply via email to