Herança no PHP 5

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:
diagrama_pessoa_funcionario1
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()}";
?>