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></body> </html> Aproveito para convidar quem quiser se associar ao meu blog, será bem vindo!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(); } } ?>
Obrigado. Espero que esta aula ajude. Até a próxima!
Nenhum comentário:
Postar um comentário
Comentemm, vamos compartilhar experiências!