PHP Orientado a Objetos para iniciantes – Parte 6

Usando herança de classes

Classes podem herdar propriedades e métodos de outras classes usando a palavra chave extends. Por exemplo, para criar uma segunda classe que herda as propriedades e métodos de MyClass e adiciona um novo método, você deve alterar o seu arquivo de teste para ficar como abaixo:

<?php  
  
class MyClass  
{  
    public $prop1 = "Eu sou uma propriedade de classe!";  
  
    public function __construct()  
    {  
        echo 'A classe "'.__CLASS__.'" foi iniciada!<br />'; 
    } 
 
    public function __destruct() 
    { 
        echo 'A classe "'.__CLASS__.'" foi destruida!<br />';  
    }   
  
    public function setProperty($newval)  
    {  
        $this->prop1 = $newval;  
    }  
  
    public function getProperty()  
    {  
        return $this->prop1 . "<br />";  
    }  
}  
  
class MyOtherClass extends MyClass  
{  
    public function newMethod()  
    {  
        echo "A partir de um novo método em ".__CLASS__.".<br />";  
    }  
}  
  
// Cria um novo objeto  
$newobj = new MyOtherClass;  
  
// Chama o método newMethod() de MyOtherClass 
$newobj->newMethod();  
  
// Usa um método herdado da classe pai
$newobj->getProperty();  
  
?> 

Ao recarregar o arquivo de teste em seu navegador, você deverá ver:

A classe “MyClass” foi iniciada!
A partir de um novo método em MyOtherClass.
Eu sou uma propriedade de classe!

A classe “MyClass” foi destruída!

Sobrescrevendo propriedades e métodos herdados

Para alterar o comportamento de uma propriedade ou método existente na nova classe, você pode simplesmente substituí-lo, declarando-o novamente na nova classe:

<?php  
  
class MyClass  
{  
    public $prop1 = "Eu sou uma propriedade de classe!";  
  
    public function __construct()  
    {  
        echo 'A classe "'.__CLASS__.'" foi iniciada!<br />'; 
    } 
 
    public function __destruct() 
    { 
        echo 'A classe "'.__CLASS__.'" foi destruida!<br />';  
    }   
  
    public function setProperty($newval)  
    {  
        $this->prop1 = $newval;  
    }  
  
    public function getProperty()  
    {  
        return $this->prop1 . "<br />";  
    }  
}  
  
class MyOtherClass extends MyClass  
{  
    public function __construct()  
    {  
        echo "Novo construtor em ".__CLASS__.".<br />";  
    } 
    public function newMethod()  
    {  
        echo "A partir de um novo método em ".__CLASS__.".<br />";  
    }  
}  
  
// Cria um novo objeto  
$newobj = new MyOtherClass;  
  
// Chama o método newMethod() de MyOtherClass 
$newobj->newMethod();  
  
// Usa um método herdado da classe pai
$newobj->getProperty();  
  
?> 

Agora ao recarregar o código no browser você verá:

Novo construtor em MyOtherClass.
A partir de um novo método em MyOtherClass.
Eu sou uma propriedade de classe!

A classe “MyClass” foi destruída!

Preservando a funcionalidade original do método enquanto o sobrescreve

Para adicionar uma nova funcionalidade para um método herdado, mantendo o método original intacto, use a palavra-chave parent com o operador de resolução de escopo (::):

<?php  
  
class MyClass  
{  
    public $prop1 = "Eu sou uma propriedade de classe!";  
  
    public function __construct()  
    {  
        echo 'A classe "'.__CLASS__.'" foi iniciada!<br />'; 
    } 
 
    public function __destruct() 
    { 
        echo 'A classe "'.__CLASS__.'" foi destruida!<br />';  
    }   
  
    public function setProperty($newval)  
    {  
        $this->prop1 = $newval;  
    }  
  
    public function getProperty()  
    {  
        return $this->prop1 . "<br />";  
    }  
}  
  
class MyOtherClass extends MyClass  
{  
    public function __construct()  
    {  
        parent::__construct(); // Chama o construtor da classe pai
        echo "Novo construtor em ".__CLASS__.".<br />";  
    } 
    public function newMethod()  
    {  
        echo "A partir de um novo método em ".__CLASS__.".<br />";  
    }  
}  
  
// Cria um novo objeto  
$newobj = new MyOtherClass;  
  
// Chama o método newMethod() de MyOtherClass 
$newobj->newMethod();  
  
// Usa um método herdado da classe pai
$newobj->getProperty();  
  
?> 

Agora tanto o método sobrescrito da classe pai quanto o da classe filha serão executados:

A classe “MyClass” foi iniciada!
Novo construtor em MyOtherClass.

A partir de um novo método em MyOtherClass.
Eu sou uma propriedade de classe!

A classe “MyClass” foi destruída!

Em nosso próximo post (PHP Orientado a Objetos para iniciantes – Parte 7), iremos aprender um pouco sobre atribuição de visibilidade de propriedades e métodos.

Se você não viu os posts anteriores desta série de posts, confira-os nos links abaixo:

PHP Orientado a Objetos para iniciantes – Parte 1
PHP Orientado a Objetos para iniciantes – Parte 2
PHP Orientado a Objetos para iniciantes – Parte 3
PHP Orientado a Objetos para iniciantes – Parte 4
PHP Orientado a Objetos para iniciantes – Parte 5

Marcos de P. Muniz

Graduado em Sistemas de Informação pela UEMG, é Pós Graduado em Segurança da Informação pela Faculdade Pitágoras, é desenvolvedor PHP desde 2006, trabalha como Analista / Desenvolvedor em uma empresa que atua na área de ensino a distância, faz freelancer criando sites, sistemas e portais utilizando PHP, MySQL e jQuery.

Você pode gostar...

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *