PHP8 Errors
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";
}