segunda-feira, 4 de março de 2013

Introdução a Orientação a Objeto no PHP - parte 2

Nesta continuação da aula anterior exemplifico os motivos para não utilizar atributos públicos e atribuição de valores diretamente aos objetos.


Quando definimos um atributo público no caso de nossa classe Cliente, a qual possui um atributo nome com visibilidade public, devemos ficar atentos para que atribuição de valores indesejados não ocorra!
<?php
/**
 * Classe Cliente
 *
 * @author Luiz Carlos
 */
class Cliente {
    //Atributos
    public $nome;
}
?>
Vanmos comentar os métodos setNome e getNome da classe Cliente.
    //Métodos
//    public function setNome($nome)
//    {
//        $this->nome = $nome;
//    }
//   
//    public function getNome()
//    {
//        return $this->nome;
//    }
Podemos atribuir e recuperar valores acessando diretamente o objeto.
    if(!empty($_GET))
    {     
        $nome = $_GET['nome'];
        $cliente = new Cliente();
//        echo $cliente->nome . ", salvo com sucesso<>";
//        echo $cliente->idade . " anos é a idade do cliente!";
        $cliente->nome = $nome;
        echo $cliente->nome . ", salvo com sucesso!";
    }
Nosso script irá funcionar. Agora vamos adicionar um novo atributo idade.
class Cliente {
    //Atributos
    public $nome;
    public $idade;
}
No formulário adicione mais um label e um input para idade, o formulário deve ser igual a este:
<form name="fcliente" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
    <label for="nome">Nome</label>
    <input name="nome" type="text" maxlength="30" size="30"/>
    <label for="idade">Idade</label>
    <input name="idade" type="text" maxlength="3" size="3" />
    <input value="Salvar" type="submit">
</form>
Por último alteramos o nosso script responsável por tratar o formulário:
    if(!empty($_GET))
    {      
        $cliente = new Cliente();
        $nome = $_GET['nome'];
        $idade = $_GET['idade'];
//        echo $cliente->nome . ", salvo com sucesso<>";
//        echo $cliente->idade . " anos é a idade do cliente!";
        $cliente->nome = $nome;
        $cliente->idade = $idade;
        echo $cliente->nome . ", salvo com sucesso!<>";
        echo $cliente->idade . " é a idade no cliente!";
    }
Quando atribuímos valores diretamente ao atributo do objeto, qualquer valor pode ser aceito! Coisas estranhas e mensagens indesejadas como um cliente com 175 anos de idade, pode ocorrer! Para resolver esta anomalia, devemos usar métodos que tratam os dados antes de atribuir os valores aos objetos, como segue:
    public function setIdade($idade)
    {
        if($idade > 130)
        {
            exit();
        }
        else
        {
            $this->idade = $idade;
        }
    }
No método setIdade, testamos o parâmetro recebido executando a condicional if(se) for maior que 130, executa a função exit() do PHP, else (senão) grava o valor no atributo do objeto. Segue o código completo do 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)
        {
           exit();
        }
        else
        {
            $this->idade = $idade;
        }
    }

    public function getNome()
    {
        return $this->nome;
    }
    
    public function getIdade()
    {
        return $this->idade;
    }
}
?>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html" charset="UTF-8"/>
        <title>Classe Cliente</title>
    </head>
    <body>
        <?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.";
            }
        ?>
        <form name="fcliente" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
            <label for="nome">Nome</label>
            <input name="nome" type="text" maxlength="30" size="30"/>
            <label for="idade">Idade</label>
            <input name="idade" type="text" maxlength="3" size="3" />
            <input value="Salvar" type="submit">
        </form>
    </body>        
</html>
Obrigado. Bom estudo!

Nenhum comentário:

Postar um comentário

Comentemm, vamos compartilhar experiências!