В целом то, что вам нужно скорее ближе к новой функциональности в PHP 8:
throw expression. В этом случае ваш код мог бы выглядеть, к примеру, вот так:
Auth::check() ?? throw new AuthenticationRequiredException("Вам необходимо сначала авторизоваться");
Однако, если вы реально хотите именно такой конструкции как ваша - то здесь, конечно, тоже есть варианты, ведь начиная с PHP 7 нам доступен uniform function call syntax и, следовательно, возможны конструкции вида:
Auth::check() ?? (function(){echo "Вам необходимо сначала авторизоваться";})();
Конечно, я ни в коем случае не призываю делать именно так, это плохое решение, но технически возможное.
Существенно лучшим вариантом в этом случае на самом деле будет просто создание отдельной функции, которая будет брать на себя реакцию на такие ситуации:
function failure(string $error): void
{
// Просто для того чтобы быть ближе к вашему примеру,
// в реальности здесь должна быть нормальная логика обработки,
// к примеру тот же throw new RuntimeExcepton($error);
echo $error;
}
в этом случае ваш пример сводится к:
Auth::check() ?? failure("Вам необходимо сначала авторизоваться");
Помимо этого обратите внимание на то, что использование null coalescing operator
??
подразумевает, что тип возвращаемого значения функции
Auth::check()
- это
mixed|null
что выглядит странно, поскольку от результата проверки ожидается тип
boolean
.
В реальности здесь лучше подходит сокращённая версия тернарного оператора, т.н.
elvis operator. В этом случае ваш код может выглядеть вот так:
class Auth {
public static function check(): bool
{
return false;
}
}
function failure(string $error): void
{
// В реальности, как указано выше, лучше использовать
// throw new RuntimeException($error);
// echo используется для примера
echo $error;
}
Auth::check() ?: failure('Вам необходимо сначала авторизоваться');
Проверить можно
здесь.