segunda-feira, 8 de abril de 2013

Introdução a Orientação a Objetos no PHP - parte 5

Herança

Uma classe pode herdar atributos ou métodos de uma outra classe. Acrescenta-se após o nome da classe a palavra reservada extends seguida do nome da classe da classe da qual esta var herdar atributos e métodos. A classe que cede os atributos e métodos é chamada de superclasse e a classe que herdar os atributos e métodos recebe o nome de subclasse.

A subclasse pode utilizar os atributos e métodos existentes na superclasse, sobrescrever os métodos da superclasse ou criar outros atributos ou métodos.

O PHP procura primeiramente o método na subclasse. Caso o método não exista, ele será procurado na superclasse. Como toda regra existe sua exceção, os métodos definidos com a palavra reservada final, indicando que as subclasses não podem sobrescrever estes métodos, mas veremos isso somente mais a frente.

Para acessar os atributos e métodos da subclasse, devemos utilizar a palavra reservada parent seguida de ::  (dois pontos) exemplo: parent::setNome()


Como exemplo vamos criar a classe pai ou superclasse chamada pessoa, arquivo pessoa.php
<?php
/**
 * Description of pessoa
 *
 * @author aluno
 */
class pessoa {
    //atributos
    protected $id;
    protected $nome;
    protected $endereco;
    
    //métodos
    function __construct($id, $nome, $endereco) {
        $this->setId($id);
        $this->setNome($nome);
        $this->setEndereco($endereco);
    }
    
    public function __destruct() {
        echo "ID: " . $this->getId();
        echo "Nome: " . $this->getNome();
        echo "Endereço: " . $this->getEndereco();
    }

        
    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getNome() {
        return $this->nome;
    }

    public function setNome($nome) {
        $this->nome = $nome;
    }

    public function getEndereco() {
        return $this->endereco;
    }

    public function setEndereco($endereco) {
        $this->endereco = $endereco;
    }
}
?>

Depois criamos a classe filha ou subclasse chamada aluno, aluno.php.
<?php
/**
 * Description of aluno
 *
 * @author aluno
 */
include 'pessoa.php';


class aluno extends pessoa {
    //atributos
    protected $rm;
    protected $serie;
    protected $turma;
    
    //métodos
    public function __construct($id, $nome, $endereco, $rm, $serie, $turma) {
        parent::__construct($id, $nome, $endereco);
        $this->setRm($rm);
        $this->setSerie($serie);
        $this->setTurma($turma);
    }
    
    public function __destruct() {
        parent::__destruct();
        echo "RM: " . $this->getRm();
        echo "Série: " . $this->getSerie();
        echo "Turma: " . $this->getTurma();
    }

    
    public function getRm() {
        return $this->rm;
    }

    public function setRm($rm) {
        $this->rm = $rm;
    }

    public function getSerie() {
        return $this->serie;
    }

    public function setSerie($serie) {
        $this->serie = $serie;
    }

    public function getTurma() {
        return $this->turma;
    }

    public function setTurma($turma) {
        $this->turma = $turma;
    }
}
?>

E por último o formulário, arquivo cadastro.php


<?php 
    include 'aluno.php';
?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Cadastro</title>
        <style type="text/css">
            label {display: block;}
        </style>
    </head>
    <body>
        <form name="fcadastro" action="<?php echo $_SERVER['PHP_SELF'];?>" method="get">
            <label for="id">ID </label>
            <input name="id" type="text" maxlength="5" size="5"/><br>
            <label for="nome">Nome </label>       
            <input name="nome" type="text" maxlength="50" size="50"/><br>
            <label for="endereco">Endereço </label>
            <input name="endereco" type="text" maxlength="50" size="50"/><br>
            <label for="rm">RM </label>
            <input name="rm" type="text" maxlength="5" size="5"/><br>
            <label for="serie">Série </label>
            <input name="serie" type="text" maxlength="10" size="10"/><br>
            <label for="turma">Turma </label>
            <input name="turma" type="text" maxlength="1" size="1"/><br>
            
            <input value="Salvar" type="submit"/>
        </form>
        
        <?php
        // put your code here
        if(!empty($_GET))
        {
            $id = $_GET['id'];
            $n = $_GET['nome'];
            $e = $_GET['endereco'];
            $rm = $_GET['rm'];
            $s = $_GET['serie'];
            $t = $_GET['turma'];
            
            $aluno = new aluno($id, $n, $e, $rm, $s, $t);
        
        }
        
        ?>
    </body>
</html>

Segue vídeoaula abaixo...


Até a próxima!