Olá, estou enviando essa pergunta mais para deixar registrado minha opinião.
Não é boa prática em programação declarar variáveis e não usá-las, de igual maneira isso se aplica às assinaturas dos métodos e funções, tanto que para tal, existem valores "default".
No exemplo oferecido pelo instrutor, é recomendado reaproveitar a InvalidArgumentException, o que está correto, mas propõe que a mensagem seja inserida no bloco catch.
Nesse caso, como o PHP obrigou a passar o tipo e criou uma variável catch (InvalidArgumentException $exception), o mais sensato seria colocar essa mensagem exatamente onde foi jogada (throw), até porque, o método em questão deposita poderia vir a ter mais de um InvalidArgumentException e isso precisaria ser feito sobremaneira.
Então ao invés de:
public function deposita(float $valorADepositar): void
{
if ($valorADepositar < 0) {
throw new \InvalidArgumentException();
}
$this->saldo += $valorADepositar;
}
...
try {
$conta->deposita(-100);
} catch (InvalidArgumentException $exception) {
echo "Valor a depositar precisa ser positivo, seu hacker perigoso." . PHP_EOL;
}
O mais sensato seria:
public function deposita(float $valorADepositar): void
{
if ($valorADepositar < 0) {
throw new \InvalidArgumentException(
"Valor a depositar precisa ser positivo, seu hacker perigoso."
);
}
$this->saldo += $valorADepositar;
}
...
try {
$conta->deposita(-100);
} catch (InvalidArgumentException $exception) {
echo $exception->getMessage() . PHP_EOL;
}
Todavia, no PHP 8 é possível fazer parcialmente o que o Instrutor propôs removendo a variável e deixando somente o tipo, usando um recurso chamado "non-capturing catches" ou "catch"s não capturáveis, ou seja:
...
try {
$conta->deposita(-100);
} catch (InvalidArgumentException) {
echo "Valor a depositar precisa ser positivo, seu hacker perigoso." . PHP_EOL;
}
Todavia, ainda assim, podemos ter a questão de vários InvalidArgumentException dentro do mesmo método, o que nos obrigaria a voltar ao mecanismo onde usamos a variável e o getMessage().