A utilização do paradigma orientado a objetos nos permite criar projetos de forma mais organizada, mas um de seus principais benefícios é o reuso. A possibilidade de reutilizar partes de códigos já escritos antes, nos dando mais agilidade no desenvolvimento de aplicações, e sem a necessidade de termos trechos de códigos duplicados.
Herança em Orientação a objetos nada mais é que o compartilhamento de atributos e comportamentos entre as classes de uma mesma hierarquia. As classes inferiores da hierarquia herdam esses atributos e comportamentos das classes superiores, chamadas de superclasses.
Um exemplo simples disso é o seguinte:
Uma superclasse chamada de veiculo. Todo veículo tem nome, cor, ano de fabricação, etc. Como métodos poderíamos ter andar, ligar, etc. Depois criaríamos as classes mais especificas, como: Carro, Caminhão, Ônibus. E dentro de cada uma colocaríamos as suas características próprias, por exemplo, na classe ônibus podemos por as seguintes propriedades: Número máximo de passageiros sentados, número máximo de passageiros em pé. Propriedades essas que já não são interessantes para as classes Carro e caminhão.
Para exemplificar o uso de herança, vamos utilizar as classes Pessoa e funcionário.
Veja o diagrama UML abaixo:
Abaixo o código fonte comentado:
< ? php class Pessoa /* classe pessoa. è uma super classe. É uma classe generica, a partir dela podemos criar classes mais especificas. */ { //Atributos da classe var $nome; var $endereco; var $idade; // metodos que imprimem os atributos da classe function ImprimeDados() { echo "Nome: {$this->nome}<br>"; echo "Endereço: {$this->endereco}<br>"; echo "Idade: {$this->idade}<br>"; } } class Funcionario extends Pessoa /* classe filha, herda atributos e métodos de sua classe pai, no caso a classe pessoa. Veja o comando extends para criar a herança */ { //atributos da classe var $salario; var $cargo; /* método criado para calcular o salario liquido e mostrar o mesmo*/ function ObterSalario() { $this->salario -=$this->salario * 0.1; echo "Salário:{$this->salario}<br>"; } /*Aqui temos uma sobre escrita (overriding). Veja que modificamos o funcionamento do metodo da classe pai acrescentando a impressão na tela do salario e o cargo. O Operador parent:: serve para chamar o metodo da classe pai*/ function ImprimeDados() { parent::ImprimeDados(); echo "Salário Bruto: {$this->salario}<br>"; echo "Cargo: {$this->cargo}<br>"; } } ?> < ? php //criando o objeto $func e passando valores $func = new funcionario(); $func->nome = "carlos Eduardo"; $func->endereco = "Assis Brasil, 123"; $func->idade = 23; $func->salario = 2000; $func->cargo = "Diretor"; echo "<b>Dados do funcionário</b><br>"; //passando para o nosso objeto o metodo de mostrar os dados echo "{$func->ImprimeDados()}"; echo "<b>Salário do funcionário com desconto de 10%</b><br>"; //mostrando o salario com o metodo que desconta 10% echo "{$func->ObterSalario()}"; ?>