Эквивалент оператора NULL, эквивалентный в PHP? - PullRequest
0 голосов
/ 26 января 2020

in php Я часто вижу, что делаю что-то вроде этого:

$res->getBody()->getContents();

, но если body возвращает null, следующий вызов приведет к фатальному исходу.

В Eloquent это может быть еще хуже.

Есть ли более чистое решение вместо

if ($res and $res->getBody()) {
    return $res->getBody()->getContent();
} else {
    return null;
}

Ответы [ 2 ]

0 голосов
/ 26 января 2020

что вы думаете об этом подходе:

function valueOrNull(callable $closure){
    try{
        return $closure();
    } catch (\Throwable $e){
        return null;
    }
}

//$rv always null or return value never matter what
$rv  = valueOrNull(fn()=> $res->getBody()->getContents()->getFirstItem()->getName());;
0 голосов
/ 26 января 2020

Вы можете использовать троичный оператор (всегда используется, например, в Laravel):

return $res and $res->getBody() ? $res->getBody()->getContents() : null;

или в случаях, когда вы хотите вернуть то же самое, что и при проверке, Elvis operator:

return $res->getBody()?: $something_else ; // this check only if the getbody() call return null, and if not, return what that call has returns, otherwise $something_else 

Как примечание, вы можете использовать оператор по умолчанию, иногда такой:

return $res->getBody() ?? $default_or_whatever; // if getBody returns something evaluated as false, it will return the $default_or_whatever
// same thing as return $res->getBody() ? $res->getBody() : $default_or_whatever
// and return $res->getBody() ?: $default_or_whatever
...