о чем ты?Как это мило. Привести пример говнокода и утверждать, что нашёл лучшее решение…
$country = null;
if ($session !== null) {
$user = $session->user;
if ($user !== null) {
$address = $user->getAddress();
if ($address !== null) {
$country = $address->country;
}
}
}
function getCountry($session) {
if (!isset($session->user)) return; // or throw
$address = $session->user->getAddress();
if (!isset($address)) return; // or throw
$country = $address->country;
return $country;
}
клево че, и nullable и throwableна нормальный язык, получится что-то вроде
А такой эквивалент не подходит?А если переводить
$country = null;
if(isset($session->user)) {
$country = $session->user->getAddress()->country ?? null;
}
Сработает.А если getAddress() is null ?
Проверь, а?…Сработает.
// Тест...
$session = (object)[
'user' => new class {
function getAddress() {
return null;
}
function getAddress2() {
return (object)['country' => 'country'];
}
},
];
$country = null;
$country2 = null;
if(isset($session->user)) {
$country = $session->user->getAddress()->country ?? null;
$country2 = $session->user->getAddress2()->country ?? null;
}
var_dump(['$country' => $country, '$country2' => $country2]);
/*
array(2) {
["$country"]=>
NULL
["$country2"]=>
string(7) "country"
}
*/