In this post let’s cover what’s new when it comes to error handling in PHP81
Throw expression2 #
Now throw
can be used as an expression. The following is valid:
// This was previously not possible since arrow functions only accept a single expression while throw was a statement.
$callable = fn() => throw new Exception();
// $value is non-nullable.
$value = $nullableValue ?? throw new InvalidArgumentException();
// $value is truthy.
$value = $falsableValue ?: throw new InvalidArgumentException();
// $value is only set if the array is not empty.
$value = !empty($array)
? reset($array)
: throw new InvalidArgumentException();
$condition && throw new Exception();
$condition || throw new Exception();
$condition and throw new Exception();
$condition or throw new Exception();
Non-capturing catches3 #
Pre PHP8 situation #
PHP requires exceptions being caught to be captured to a variable:
try {
changeImportantData();
} catch (PermissionException $ex) {
echo "You don't have permission to do this";
}
PHP8 #
Now catching exceptions are allowed without capturing them into variables:
try {
changeImportantData();
} catch (PermissionException) { // The intention is clear: exception details are irrelevant
echo "You don't have permission to do this";
}