segunda-feira, 18 de março de 2013

Introdução a Orientação a Objetos no PHP - Parte 4

Construtor e Destrutor de Classes

O construtor  __construct(), é uma função definida na classe e que é executada sempre que o objeto é criado (isto é, sempre que a classe é instanciada). No PHP a função __construct() é implícita, ela esta subentendida quando usamos new(). A função __construct() pode ser construída de forma que aceite parâmetros na sua definição. 
    public function __construct($n = "", $i="")
    {
        $this->setNome($n);
        $this->t;setIdade($i);
    }
Isto é útil quando chamamos new() com parâmetros assim economizamos linhas de código pois não precisamos chamar os métodos set() para definir os valores dos atributos do objeto. Como no exemplo abaixo.
<?php
     if(!empty($_GET))
     {
         $n = $_GET['nome'];
         $i = $_GET['idade'];
         try 
         {
             $cliente = new Cliente($n, $i);
             //$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 destrutor da classe, a função __destruct() não recebe nenhum paràmetro, é executado sempre que o objeto for destruído, seja de forma explicita ou implicitamente (por exemplo, no final do script que utiliza a classe).
    public function __destruct() 
    {
        echo "O objeto " . $this->getNome() . " foi destruído.";
    }
Classes que estendem outras classes, ou seja, subclasses o construtor precisa ser chamado de forma explícita, mas sobre isso falarei mais adiante, nas aulas futuras. Disponibilizo o código completo da classe abaixo.
<?php
/**
 * Classe Cliente
 *
 * @author Luiz Carlos
 */
class Cliente {
    //Atributos
    public $nome;
    protected $idade;
    //Métodos
    
    public function __construct($n = "", $i = "")
    {
        $this->setNome($n);
        $this->setIdade($i);
    }

    public function __destruct() 
    {
        echo "O objeto " . $this->getNome() . " foi destruído.";
    }

    public function setNome($nome)
    {
        $this->nome = $nome;
    }
    
    public function setIdade($idade)
    {
        if($idade > 130)
        {
//            exit();
            throw new Exception("Idade inválida!");
        }
        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))
            {
                $n = $_GET['nome'];
                $i = $_GET['idade'];
                try 
                {
                    $cliente = new Cliente($n, $i);
                    //$cliente->setNome($nome);
                    //$cliente->setIdade($idade);
                    echo $cliente->getNome() . ", salvo com sucesso.";
                    echo $cliente->getIdade() . " anos de idade.";
                }
                catch (Exception $e)
                {
                    echo $e->getMessage();
                }
            }
        ?>
        <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>
Segue vídeo-aula...

Até a próxima!

Nenhum comentário:

Postar um comentário

Comentemm, vamos compartilhar experiências!