O que é herança?

A herança é um dos quatro pilares da Programação orientada a objetos (OOPs ). Herança é o fenômeno pelo qual uma classe filha pode herdar todas as propriedades e características da classe pai.

Você pode entender isso com um exemplo simples da vida real. Considere o exemplo dos seres humanos. Você herda características da classe’Humanos’, como andar, sentar, correr, comer, etc. A classe’Humanos’herda da classe’Mamífero’, essas características características-tornando a classe’Humano’uma classe derivada de’Mamífero’. Além disso, a classe ‘Mamífero’ obtém seus traços característicos de outra classe-‘Animal’. Isso torna a classe’Mamífero’uma classe derivada da classe’Animal’; também tornando a classe’Animal’uma classe base.

Herança em PHP

Herança em PHP é um conceito OOPs importante e pode não ser esquecido. É necessário compreender a herança em PHP para obter uma visão holística dos conceitos orientados a objetos em PHP.

A herança fornece muitos benefícios que tornam a programação em PHP muito mais conveniente. Um desses benefícios é a capacidade de reutilização do código. A capacidade de reutilização permite gerar código limpo e a replicação do código é reduzida a quase zero. Reutilizar códigos existentes oferece várias vantagens. Isso economiza tempo, custo, esforço e aumenta a confiabilidade de um programa. Além disso, o programa se torna intuitivo.

O PHP oferece principalmente três tipos de herança com base em sua funcionalidade. Esses três tipos são os seguintes:

  • Herança Única: Herança única é o tipo mais básico ou fundamental de herança oferecido pelo PHP. Há apenas uma classe base e uma classe sub/derivada em uma única herança e a subclasse é herdada diretamente da classe base.
  • Herança hierárquica: como o nome sugere, a herança hierárquica adota uma estrutura em árvore, onde várias classes derivadas são herdadas da classe base.
  • Herança multinível: A herança multinível é o terceiro tipo de herança suportado no PHP. Isso ocorre em diferentes níveis. Aqui, uma classe base é herdada por uma classe derivada, então essa classe derivada é herdada por outras classes derivadas e assim por diante.

Este artigo discutirá todos esses tipos em detalhes posteriormente.

Adicionar outra estrela à sua avaliação de desempenho

Aprenda com especialistas do setor GRATUITAMENTE Comece a aprender

Adicionar outra estrela à sua avaliação de desempenho

A sintaxe para herdar uma classe em PHP

Descrita abaixo está a sintaxe usada para estender uma classe base em PHP.

classe associated_class_name estende base_class_name {

//definir funções de membro de

//a classe derivada aqui.

}

A palavra-chave extends é usada para definir uma classe derivada ou filha em PHP.

  • nome da classe derivada: especifica o nome da classe derivada ou filha. A classe filha, também conhecida como subclasse, herda seus recursos ou características salientes de sua classe pai. Pode haver uma ou mais de uma classe derivada que herda da mesma classe base, dependendo do tipo de herança executada. Existem três modos de visibilidade suportados em PHP: Público, Privado e Protegido, que especificam como a classe derivada herdará o quê.
  • base_class_name: especifica o nome da classe base ou pai da qual a classe filha está herdando suas propriedades. Uma classe base também é conhecida como classe pai porque todas as classes denominadas classes derivadas ou classes filhas herdam suas propriedades da classe base. Pode haver uma ou mais classes básicas em um programa, dependendo do tipo de herança. Por exemplo, em uma herança de nível único, haverá uma classe base para uma classe filha, mas em uma herança de vários níveis, uma classe filha pode herdar de mais de uma classe base em mais de um nível.

Modificadores de acesso em PHP

O modificador de acesso (privado, público ou protegido) usado na definição das funções de membro e membros de dados da classe derivada especifica o modo com o qual os recursos da classe base são derivados. O modificador de acesso controla onde e como os membros de dados e funções de membro de uma classe base podem ser herdados pelas classes filhas. Esses modificadores de acesso são usados ​​para restringir o acesso da classe base da classe filha para encapsular os dados. Isso é popularmente conhecido como ocultação de dados.

Em PHP, existem três modificadores de acesso:

O modificador de acesso público oferece o mínimo de privacidade para os atributos da classe base. Se o modificador de acesso for público, significa que a classe derivada pode acessar os membros públicos e protegidos da classe base, mas não os membros privados da classe base.

O exemplo a seguir mostra uma classe com membros públicos:

classe associated_class_name estende base_class_name

{

//membro de dados públicos

public $ var_name;

//função de membro público

função pública function_name ()

{

//defina a função aqui

}

}

O programa a seguir ilustra o modificador de acesso público em PHP:

//Defina a classe base

classe Joalharia {

public $ price=”Temos um preço fixo de 100.000″;

função printMessage () {

echo $ this-> price;

echo PHP_EOL;

}

}

//defina as classes derivadas

classe Colar estende joias {

função print () {

echo $ this-> price;

echo PHP_EOL;

}

}

//crie o objeto do

//classe derivada.

$ obj=novo colar;

//chame as funções

echo $ obj-> price;

echo PHP_EOL;

$ obj-> printMessage ();

$ obj-> print ();

?>

InheritanceInPHP_1

O modificador de acesso privado fornece o máximo de privacidade para os atributos de uma classe base. Você pode acessar um membro de dados declarado de forma privada ou uma função de membro apenas dentro da classe em que foram declarados.

O exemplo a seguir demonstra uma classe com membros particulares:

classe associated_class_name estende base_class_name

{

//membro de dados privados

private $ var_name;

//função de membro privada

função privada function_name ()

{

//defina a função aqui

}

}

Embora a acessibilidade direta de um membro privado não seja possível, você pode acessá-los indiretamente usando funções de membro públicas na classe. Se os membros privados forem acessados ​​por um membro público em uma classe, qualquer classe filha que acesse essa função pública também poderá acessar esse membro privado.

O programa a seguir ilustra o modificador de acesso privado em PHP:

//Defina a classe base

classe Joalharia {

private $ price=”Temos um preço fixo de 100.000″;

apresentação de função privada ()

{

echo”Este é um método privado de uma classe base”;

}

}

//defina as classes derivadas

classe Colar estende joias {

função printPrice ()

{

echo $ this-> price;

}

}

//crie o objeto do

//classe derivada

$ obj=novo colar;

//esta linha está tentando

//chame um método privado.

//isso gerará um erro

$ obj-> show ();

//isso também gerará um erro

$ obj-> printPrice ();

?>

InheritanceInPHP_2.

Neste programa, você está tentando acessar um membro privado diretamente em uma classe derivada. É por isso que está gerando um erro.

  • Protegido:

O modificador de acesso protegido fornece um nível de privacidade intermediário para os membros de uma classe. Se o especificador de acesso estiver protegido, isso significa que a classe derivada pode acessar os membros públicos e protegidos da classe base. Os membros protegidos de uma classe base podem ser acessados ​​dentro dessa classe e por suas classes filhas.

O exemplo a seguir demonstra uma classe com membros protegidos:

classe associated_class_name estende base_class_name

{

//membro de dados protegidos

protegido $ var_name;

//função de membro protegida

função protegida function_name ()

{

//defina a função aqui

}

}

O programa a seguir ilustra o modificador de acesso protegido em PHP:

//Defina a classe base

classe Joalharia {

protegido $ price1=10000;

protegido $ price2=20000;

//Função de subtração

função total ()

{

echo $ sum=$ this-> preço1 + $ this-> preço2;

echo PHP_EOL;

}

}

//defina as classes derivadas

classe Colar estende joias {

função printInvoice ()

{

$ imposto=100;

echo $ sub=$ this-> preço1 + $ this-> preço2 + imposto $;

echo PHP_EOL;

}

}

$ obj=novo colar;

$ obj-> total ();

$ obj-> printInvoice ();

?>

InheritanceInPHP_3

Classe filha com seus próprios métodos e propriedades

Na herança, o propósito de herdar as propriedades e os membros de uma classe base por uma classe filha é bem alcançado. Quando uma classe filha herda de uma classe base, ela tem acesso direto a todos os membros não privados da classe base. E mesmo os membros privados podem ser acessados ​​indiretamente.

No entanto, uma classe filha também pode ter seus próprios métodos e propriedades. Além dos membros da classe base, uma classe derivada pode ter quantos membros de dados e métodos você desejar. Uma classe derivada é como qualquer outra classe, com o benefício de ter acesso a alguns outros métodos e propriedades de uma classe base. É disso que se trata a herança.

O programa a seguir ilustra uma classe filha tendo acesso às propriedades de sua classe base junto com seus métodos e propriedades:

//Defina a classe base

classe base_class {

//membro de dados da classe base

public $ data_mem=10;

//função de membro da classe base

função pública member_func ()

{

echo”Eu sou a função da classe base. \ n”;

echo”Eu sou o membro dos dados da classe base: \ n”;

echo $ this-> data_mem;

}

}

//defina as classes derivadas

classe child_class extends base_class {

//função de membro da classe filha

função child_func ()

{echo”\ n \ nEu sou a função da classe filha. \ n”;

echo $ this-> data_mem;

}

}

//crie o objeto do

//classe derivada

$ obj=new child_class;

//método de chamada da classe base

$ obj-> member_func ();

//método de chamada da classe filha

$ obj-> child_func ();

?>

InheritanceInPHP_4

Tipos de herança em PHP

Os três tipos de herança a seguir são suportados no PHP.

  • Herança única

Herança única é o tipo de herança mais básico e simples. Como o nome sugere, em uma única herança, há apenas uma classe base e uma subclasse ou classe derivada. Ele herda diretamente a subclasse da classe base.

InheritanceInPHP_Flowchart_1

O programa a seguir ilustra a herança de nível único em PHP:

//classe base chamada”Joalharia”

classe Joalharia {

var $ cost=10000;

função pública printName ($ name) {

echo’Esta é a classe base: Joalharia e o nome da joalharia é:’. $ name. PHP_EOL;

}

}

//classe derivada chamada”Colar”

classe Colar estende joias {

função pública printName ($ name) {

echo’Esta é uma classe infantil: Colar e o nome da joia é:’. $ name. PHP_EOL;

//esta classe pode acessar

//membro de dados de sua classe pai.

echo’O preço é:’. $ this-> custo. PHP_EOL;

}

}

$ f=novas joias ();

$ s=novo colar ();

$ f-> printName (‘Ring’);

$ s-> printName (‘Colar’);

?>

InheritanceInPHP_5.

  • Herança multinível

Herança multinível é outro tipo de herança encontrada no PHP. A herança multinível também pode ser explicada por uma árvore genealógica. Existe uma classe base. Esta classe base pode ser herdada por. Essas subclasses (não necessariamente todas as subclasses) atuam como classe base e são posteriormente herdadas por outras subclasses. É como uma família ter descendentes ao longo de gerações.

InheritanceInPHP_Flowchart_2

O programa a seguir ilustra a herança multinível em PHP:

//classe base chamada”Joalharia”

classe Joalharia {

função pública totalCost () {

retornar’custo total das joias: 600000′;

}

}

//classe derivada chamada”Colar”

//classe herdada do formulário”Joalharia”

classe Colar estende joias {

colar de função pública () {

retornar’custo do colar: 450000′;

}

}

//classe derivada chamada”Pendant”

//classe de formulário herdada”Colar”

classe Pingente estende Colar {

public function pendantCost () {

retornar’custo pendente: 600000′;

}

função pública priceList () {

echo’1.’. $ this-> totalCost (). PHP_EOL;

echo’2.’. $ this-> colar (). PHP_EOL;

echo’3.’. $ this-> pendantCost (). PHP_EOL;

}

}

//criando objeto de

//a classe derivada

$ obj=novo pendente ();

$ obj-> priceList ();

?>

InheritanceInPHP_6

  • Herança hierárquica

Como o nome sugere, a herança hierárquica mostra uma estrutura semelhante a uma árvore. Muitas classes derivadas são herdadas diretamente de uma classe base. Nesse tipo de herança, mais de uma classe derivada compartilha a mesma classe pai.

InheritanceInPHP_Flowchart_3

O programa a seguir ilustra a herança hierárquica em PHP:

//classe base chamada”Joalharia”

classe Joalharia {

função pública Joalharia () {

echo’Esta classe é joalharia’. PHP_EOL;

}

}

//classe derivada chamada”Colar”

classe Colar estende joias {

}

//classe derivada chamada”Colar”

classe pulseira estende joias {

}

//criando objetos de

//classes derivadas

//”Colar”e”Pulseira”

$ n=novo colar ();

$ b=nova pulseira ();

?>

InheritanceInPHP_7.

Modificador de acesso protegido em PHP

Conforme discutido anteriormente, os membros protegidos de uma classe só podem ser acessados ​​dentro dessa classe e pelas classes derivadas que a herdam. Mesmo uma instância da classe derivada não pode acessar o membro protegido de sua classe base, fora dessa classe. Isso significa que os membros protegidos podem ser acessados ​​apenas por uma classe derivada e pela própria classe base, e não em qualquer outro lugar do programa.

Os programas a seguir ilustram a acessibilidade de membros protegidos em PHP:

//classe base chamada”Joalharia”

classe Joalharia {

custo público em $=10000;

//função de membro protegida

//da classe base

display de função protegida () {

echo’Esta é a classe base.’. PHP_EOL;

}

}

//classe derivada chamada”Colar”

classe Colar estende joias {

show de função pública () {

echo’Esta é a classe filha.’. PHP_EOL;

}

}

//crie um objeto da classe derivada

$ obj=novo colar ();

//chamar função da classe derivada

$ obj-> show ();

//chame a função”protegida”da classe base

$ obj-> display ();//isso gerará um erro

?>

InheritanceInPHP_8

No programa acima, uma instância da classe derivada tenta chamar uma função de membro protegida de sua classe base fora de ambas as classes. É por isso que o programa está gerando um erro.

Este problema pode ser resolvido usando um método público. Visto que um membro protegido pode ser acessado diretamente dentro da classe derivada, chamar o membro protegido em um método público da classe derivada torna possível realizar a tarefa de acessar o membro protegido indiretamente.

O programa a seguir ilustra isso:

//classe base chamada”Joalharia”

classe Joalharia {

custo público em $=10000;

//função de membro protegida

//da classe base

display de função protegida () {

echo’Esta é a classe base.’. PHP_EOL;

}

}

//classe derivada chamada”Colar”

classe Colar estende joias {

show de função pública () {

echo’Esta é a classe filha.’. PHP_EOL;

//função de membro protegida da classe base

//pode ser acessado nesta classe derivada

$ this-> display ();

}

}

//crie um objeto da classe derivada

$ obj=novo colar ();

//chamar função da classe derivada

$ obj-> show ();

?>

/InheritanceInPHP_9

Substituindo métodos herdados em PHP

A sobreposição de funções é suportada por herança no PHP. Isso pode ser observado quando uma classe derivada e uma classe base contêm uma função com o mesmo nome. Ambas as funções devem ter o mesmo número de argumentos. A classe derivada herda as funções de membro e membros de dados de sua classe base. Portanto, para substituir uma determinada funcionalidade, você executa a substituição de função.

O programa a seguir ilustra o conceito de substituição de método em PHP:

//classe base chamada”base_class”

classe base_class {

//função”mostrar”da classe base

show de função pública () {

echo’Esta é a classe base.’. PHP_EOL;

}

}

//classe derivada chamada”classe_derigida”

classe associated_class extends base_class {

//função”mostrar”da classe derivada

show de função pública () {

echo’Esta é a classe derivada.’. PHP_EOL;

}

}

//crie um objeto da classe derivada

$ obj=new associated_class ();

//irá chamar o”show”

//função da classe derivada

$ obj-> show ();

?>

InheritanceInPHP_10.

No programa acima, tanto a classe base (ou seja, base_class) e a classe derivada (ou seja, derivada_class) têm uma função chamada “mostrar”. Se uma instância da classe derivada chamar a função show (), o PHP chamará a função show () da chamada derivada. Isso ocorre porque o associated_class sobrescreve o show () do base_class com seu próprio método show (). Se uma instância da classe base usar o método show (), não haverá substituição do método.

A palavra-chave final em PHP

Final é uma palavra-chave crítica nos conceitos de OOPs em PHP e é encontrada em várias linguagens de programação, como Java, JavaScript, etc. No entanto, a palavra-chave Final serve a propósitos diferentes em linguagens diferentes.

Em PHP, a palavra-chave final serve a diferentes propósitos, dependendo se é usada com uma classe ou um método.

  • A palavra-chave final usada com uma classe: A palavra-chave final com uma classe, serve ao propósito de prevenir herança. Se uma classe for declarada final, usando a palavra-chave “final”, então, herdar essa classe fará com que o programa gere um erro. Isso pode ser útil no caso em que você não deseja que uma classe e seus membros sejam acessados ​​em qualquer outro lugar do programa.

O programa a seguir ilustra o conceito da palavra-chave “final” com classes em PHP:

Observação: este código gerará um erro, pois estamos tentando herdar uma classe final.

final da aula de joias {

função final displayMessage () {

echo”Eu sou uma classe final. Você não pode herdar minhas propriedades!”;

}

função print () {

echo”Eu sou a função da classe Jewellery.”;

}

}

classe testClass estende joias {

função show () {

echo”Eu sou a função da classe de teste.”;

}

}

$ obj=new testClass;

$ obj-> show ();

?>

InheritanceInPHP_11

  • A palavra-chave final usada com um método: A palavra-chave final, quando usada com um método, tem o objetivo de evitar a substituição do método. Se um método foi declarado final, usando a palavra-chave “final”, então outra função com o mesmo nome e os mesmos parâmetros não pode ser definida em uma classe derivada. Chamar essa função fará com que o programa emita um erro.

Os programas a seguir ilustram o conceito da palavra-chave “final” com métodos em PHP:

Sem a palavra-chave final (produzirá saída, mas causará a substituição do método)

classe Joalharia {

função printMessage () {

echo”Eu sou a função da classe derivada.”;

}

}

classe testClass estende joias {

função printMessage () {

echo”Eu sou a função da classe derivada.”;

}

}

$ ob=new testClass;

$ ob-> printMessage ();

?>

InheritanceInPHP_12

Com a palavra-chave final. (Irá gerar um erro, para evitar a substituição do método).

classe Joalharia {

função final printMessage () {

echo”Eu sou a função da classe derivada.”;

}

}

classe testClass estende joias {

função printMessage () {

echo”Eu sou a função da classe derivada.”;

}

}

$ ob=new testClass;

$ ob-> printMessage ();

?>

InheritanceInPHP_13

Curso Full Stack Web Developer

Para se tornar um especialista em MEAN Stack Ver Curso

Full Stack Web Developer Course

Herança múltipla em PHP usando características ou interfaces

A herança múltipla é um tipo de herança em que uma classe pode herdar as propriedades de mais de uma classe pai. Nesse tipo de herança, existe uma classe derivada, que é derivada de várias classes base. Este é um dos conceitos mais importantes e úteis fornecidos no paradigma orientado a objetos e serve ao propósito em que você deseja que uma classe herde diferentes tipos de propriedades (que estão em classes diferentes).

Por exemplo, considere uma classe chamada papagaio. Agora, como um papagaio é um pássaro, e também pode ser um animal de estimação ou simplesmente uma criatura viva, o papagaio de classe pode servir a diferentes propriedades. Portanto, usando herança múltipla, a classe parrot pode herdar as propriedades de todas as três classes bird, pet e living_creature.

InheritanceInPHP_Flowchart_4.

Muitas linguagens de programação não suportam herança múltipla diretamente como Java e PHP. No entanto, o PHP fornece algumas maneiras de implementar herança múltipla em seus programas. Na linguagem de programação PHP, a herança múltipla é obtida de duas maneiras:

Traits são usados ​​para reduzir a complexidade de um programa escrevendo funcionalidades consistentes que podem ser usadas por outras classes no programa. Uma característica é como uma classe, ela pode ter funções e também métodos abstratos. As funcionalidades definidas em um trait podem ser acessadas por outras classes do programa PHP.

Os traços podem ser usados ​​para implementar o conceito de herança múltipla no PHP.

Sintaxe

classe associated_class_name estende base_class_name {

use trait_name;//“use” a palavra-chave para usar um traço

//funções de base_class

}

O programa a seguir ilustra o uso de características para implementar herança múltipla:

//declara uma classe

classe Bird {

display de função pública () {

echo”Eu sou um pássaro”;

}

}

//declara uma característica

traço animal de estimação {

show de função pública () {

echo”um animal de estimação”;

}

}

//declara uma classe derivada

classe Parrot extends Bird {

//palavra-chave”usar”para usar o traço

use Pet;

função pública msg () {

echo”e um papagaio. \ n \ n”;

}

}

//declara o objeto da classe derivada

$ test=new Parrot ();

$ test-> display ();

$ test-> show ();

$ test-> msg ();

?>

InheritanceInPHP_14

  • Interfaces:

Interfaces are used when there are objects that share the same functionality, but you don’t want the objects to know about each other. In other words, an interface provides contracts for the objects, without knowing anything else about one another.

Interfaces can also be used to implement multiple inheritance in PHP.

Syntax

//use the keyword”implement”

//to use interface

class derived_class extends base_class implements interface_name

The following program illustrates the usage of interfaces to implement multiple inheritance: 

//define a class

class Bird {

     public function insideBird() {

          echo”I am bird,”;

     }

}

//declare an interface

interface Pet {

     public function insidePet();

}

 //define a derived class

//inherited from Bird class

//and implementing Pet interface

class Parrot extends Bird implements Pet {

     function insidePet() {

          echo”and a pet,”;

     }

     public function insideParrot() {

     echo”and a parrot.\n\n”;

     }

}

//create object of the derived class

$obj=new Parrot();

$obj->insideBird();

$obj->insidePet();

$obj->insideParrot();

?>

InheritanceInPHP_15

Importance of Inheritance in PHP

Inheritance in itself is one of the most important concepts introduced in object-oriented programming. Following are some of the key points highlighting the importance of inheritance in PHP:

  • Code reusability: Inheritance strongly supports code reusability. Since the functionalities and properties of one class can be inherited and used by other classes, there is no need to write those functionalities repeatedly in different sections of the program.
  • Data hiding: Data hiding is one of the most important aspects of inheritance. Accessibility of the data can be easily controlled by using the access modifiers, and only the required data is allowed to access outside the class.
  • Extensibility: Inheritance provides a way to write extensible programs. This means that the required functionalities or classes can be extended when there is a requirement in the future growth of the program or application.
  • Overriding: The concept of method overriding can be easily achieved in PHP. The methods of a base class can be redefined in the derived class as per the requirement of the program. Those functions are overridden in the derived class, without causing any errors.
  • Reduced complexity: The complexity of code is also reduced as common properties can be simply inherited, without the need to redeclare them. This makes the code convenient.

Are you a web developer or interested in building a website? Enroll for the Full Stack Web Developer-MEAN Stack Master’s Program. Explore the course preview!

Wrapping Up!

In this article, you have learned about inheritance in PHP. You explored PHP and its object-oriented concepts in depth. You dived deep into the uses, types, modes, and all other important concepts of inheritance. This article discussed in detail several other related concepts such as final keyword, method overriding, access modifiers, etc.

To get started with PHP as a beginner, you can refer to this video. Take up our PHP Training online course to learn PHP and build dynamic applications guided by industry experts. If you are a PHP professional, you can enroll in our Advanced PHP Development Training to upskill. This will allow you to learn advanced PHP concepts such as sessions, cookies, etc.

Don’t just stop here. To learn MEAN stack development and to give yourself a chance to work for top tech giants, check out our course on Full Stack Web Developer-MEAN Stack. In this course, you will learn some of the hottest skills like Node, Mongo, etc. that will help you to set your foot into professional web development. To get a complete list of free courses offered by Simplilearn, visit Free Courses.

If you have any questions for us, please mention them in the comments section and we will have our experts answer them for you.

Happy Learning!

Categories: Wordpress