class Cliente {
//Atributos
public $nome;
protected $idade;
Agora vamos comentar os métodos e fazer a atribuição dos atributos de forma direta, o código deve ficar igual abaixo:
<?php
if(!empty($_GET))
{
$nome = $_GET['nome'];
$idade = $_GET['idade'];
$cliente = new Cliente();
// $cliente->setNome($nome);
// $cliente->setIdade($idade);
// echo $cliente->getNome() . ", salvo com sucesso.<>";
// echo $cliente->getIdade() . " anos de idade.";
$cliente->nome = $nome;
$cliente->idade = $idade;
echo $cliente->nome . ", salvo com sucesso<>";
echo $cliente->idade . " anos é a idade do cliente!";
}
?>
Salvando as alterações e acessando a página, nos é retornado um erro fatal como este:Fatal error: Cannot access protected property Cliente::$idade in /opt/lampp/htdocs/php_oo/Cliente.php on line 58Este erro diz que não podemos acessar a propriedade protegida do atributo idade do objeto Cliente, ou seja, não podemos acessar de forma direta o atributo, devemos utilizar os métodos para isso. Vamos realizar algumas alterações em nosso método setIdade, nosso método deve ficar como abaixo:
public function setIdade($idade)
{
if($idade > 130)
{
// exit();
throw new Exception("Idade inválida!");
}
else
{
$this->idade = $idade;
}
}
Vamos alterar também o script PHP que trata o retorno do formulário, deve ficar assim:
<?php
if(!empty($_GET))
{
$nome = $_GET['nome'];
$idade = $_GET['idade'];
$cliente = new Cliente();
$cliente->setNome($nome);
$cliente->setIdade($idade);
echo $cliente->getNome() . ", salvo com sucesso.";
echo $cliente->getIdade() . " anos de idade.";
}
?>
Agora estamos utilizando um novo recurso em nosso código, o comando throw, ele dispara um erro fatal da classe Exception com a mensagem "Idade inválida!"Fatal error: Uncaught exception 'Exception' with message 'Idade inválida!' in /opt/lampp/htdocs/php_oo/Cliente.php:22 Stack trace: #0 /opt/lampp/htdocs/php_oo/Cliente.php(54): Cliente->setIdade('132') #1 {main} thrown in /opt/lampp/htdocs/php_oo/Cliente.php on line 22A mensagem acima informa que o erro foi pego (Uncaugth) e além da mensagem ele exibe qual o método ocasionou o erro Cliente->setIdade('132') e o número da linha que gerou o erro, no caso a linha 22. Para que o sistema não encerre com o erro fatal precisamos tratar esta exceção alterando o script que recebe o formulário. Ele ficará conforme abaixo:
<?php
if(!empty($_GET))
{
$nome = $_GET['nome'];
$idade = $_GET['idade'];
try
{
$cliente = new Cliente();
$cliente->setNome($nome);
$cliente->setIdade($idade);
echo $cliente->getNome() . ", salvo com sucesso. ";
echo $cliente->getIdade() . " anos de idade.";
}
catch(Exception $e)
{
echo $e->getMessage();
}
}
?>
O comando try tentará executar o bloco, se um erro ocorrer o script passa para o segundo bloco catch (pegar). Lembre-se que a Exception é uma classe! Capturada a exceção pelo bloco catch, ele instancia um objeto da classe Exception chamado $e e executa seu método getMessage() que exibe a mensagem passada anteriormente pelo comando throw.Segue o código completo do script utilizado no exemplo:
<?php
/**
* Classe Cliente
*
* @author Luiz Carlos
*/
class Cliente {
//Atributos
public $nome;
protected $idade;
//Métodos
public function setNome($nome)
{
$this->nome = $nome;
}
public function setIdade($idade)
{
if($idade > 130)
{
throw new Exception("Idade inválida!");
}
else
{
$this->idade = $idade;
}
}
public function getNome()
{
return $this->nome;
}
public function getIdade()
{
return $this->idade;
}
}
?>
<html>
Classe Cliente
<body>
<?php
if(!empty($_GET))
{
$nome = $_GET['nome'];
$idade = $_GET['idade'];
try
{
$cliente = new Cliente();
$cliente->setNome($nome);
$cliente->setIdade($idade);
echo $cliente->getNome() . ", salvo com sucesso.
";
echo $cliente->getIdade() . " anos de idade.";
}
catch(Exception $e)
{
echo $e->getMessage();
}
}
?>
</body>
</html>
Aproveito para convidar quem quiser se associar ao meu blog, será bem vindo!Obrigado. Espero que esta aula ajude. Até a próxima!
Nenhum comentário:
Postar um comentário
Comentemm, vamos compartilhar experiências!