Herança de classes no PHP
Tuesday, March 10, 2009 1:05:51 PM
Não sei porque ainda não fiz um artigo sobre isso, que é de extrema importância.
Veremos como estender uma classe reutilizando códigos com facilidade
Para muitos (e para mim) a herança de classes é a melhor coisa que poderiam ter feito. Porque?
Bom, com a herança de classes você pode simplesmente desenvolver uma classe com métodos genéricos e totalmente reutilizáveis... como por exemplo a classe que foi desenvolvida aqui mesmo no blog, a nossa famosa Commons
<?php
class commons{
function prepare($sql){
return mysql_real_escape_string($sql);
}
function dateDiff($dateIni,$dateEnd)
{
$di1 = strtotime($dateIni);
$di = mktime(0,0,0,date('m',$di1),date('d',$di1),date('Y',$di1));
$df1 = strtotime($dateEnd);
$df = mktime(0,0,0,date('m',$df1),date('d',$df1),date('Y',$df1));
$dias_totais = floor(($df-$di)/86400);
return $dias_totais+1;
}
static function mergeObject($objs,&$recebedor){
if(count($objs) > 0 ){
foreach($objs as $ob){
$props = get_class_vars(get_class($ob));
foreach($props as $ind=>$val){
$recebedor->$ind = $ob->$ind;
}
}
}
}
}
?>
Agora imaginem ter que copiar e colar estas funcionalidades em todas as suas classes. Agora imaginem se você precisar alterar uma implementação em algum método. Você simplesmente terá que alterar a implementação em todas as suas classes, isso acarretaria um tempo de manutenção muito grande, que poderia ser evitado se utilizasse a herança.
Herança
Herança é um método de agregar funcionalidades de uma classe em outra, tornando-as "uma só", podendo utilizar propriedades e métodos tanto da classe estendida quando da sua classe.
Por definição chamamos a classe que será estendida de Pai e a que vai estendeu de Filha
ou seja a classe Filha estende Pai
Criando uma classe Filha
<?php
class Carro{
protected $marca;
protected $modelo;
protected $qtdPortas;
protected $tipoCombustivel;
protected $motor;
protected $partida = 0;
function ligar(){
if($this->partida == 1){
echo "O carro ja esta ligado.";
}else{
$this->partida = 1;
echo "Carro ligado..";
}
}
function abrirPorta(){
echo "Porta Aberta";
}
function fecharPorta(){
echo "Porta Fechada";
}
function desligar(){
if($this->partida == 0){
echo "O carro ja esta desligado.";
}else{
$this->partida = 0;
echo "Carro desligado..";
}
}
}
?>
Agregando as funcionalidades do Commons na classe Filha
<?php
include(PATH_DO_SEU_DIR.'/Commons.php');
class Carro extends Commons {
protected $marca;
protected $modelo;
protected $qtdPortas;
protected $tipoCombustivel;
protected $motor;
protected $partida = 0;
function ligar(){
if($this->partida == 1){
echo "O carro ja esta ligado.";
}else{
$this->partida = 1;
echo "Carro ligado..";
}
}
function abrirPorta(){
echo "Porta Aberta";
}
function fecharPorta(){
echo "Porta Fechada";
}
function desligar(){
if($this->partida == 0){
echo "O carro ja esta desligado.";
}else{
$this->partida = 0;
echo "Carro desligado..";
}
}
/* Utilizando um metodo do commons */
function calculaData($ini,$fim){
$ret = $this->dateDiff($ini,$fim);
}
}
?>











