O que é uma classe abstrata?

Como a classe abstrata, existem métodos abstratos também. Declaramos o método abstrato e a classe abstrata com a palavra-chave abstract. Neste tópico, vamos aprender sobre a classe Abstract em PHP.

Conforme o conceito de herança, a classe pai é estendida pela classe derivada. Os métodos na classe pai são implementados ou definidos pelas classes derivadas. O PHP abre um caminho para que a classe pai seja mais específica, usando a classe abstrata e os métodos abstratos.

A classe abstrata obrigatoriamente contém um método como abstrato. Além disso, essa classe abstrata também pode ter outros métodos não abstratos.

Sintaxe

Sintaxe da Classe Abstrata com um método como abstrato.

abstract class DemoAbstractClass() (
abstract public function DemoAbstractMethod();
)

Método abstrato

abstract public function DemoAbstractMethod();

Como a Abstract Class funciona em PHP?

Neste artigo, aprenderemos o trabalho da classe abstrata e será assim.

Agora, como sabemos que uma classe abstrata obrigatoriamente tem um método como abstrato.

Também pode haver métodos não abstratos. O método abstrato possui apenas a declaração na classe base. Significando que ele possui apenas nomes e parâmetros sem outro código.

Para definir mais o método e trabalhar com ele, esse método precisa ser implementado na classe derivada que estende a classe base. Além disso, lembre-se de que essa classe abstrata não pode ser instanciada para criar objetos, mas a classe derivada da classe base pode ser instanciada para criar objetos.

Exemplos de classe abstrata em PHP

Aqui estão alguns exemplos da classe Abstract em PHP, dados abaixo

Exemplo 1

No programa abaixo, aprendemos o que acontece quando um objeto de classe abstrata é criado.

Classe abstrata Student é criado contendo um método abstrato favouriteSubject () da classe Student e dois outros métodos não abstratos, como setRollNo () e getRollNO (), que definem e obtêm a função do aluno, o que é feito criando o objeto da classe derivada (estendendo a classe base).

<_?php
abstract class Student (
protected $m;
public function setRollNo($rollno) (
return $this->m = $rollno;
)
public function getRollNo() (
return $this->m;
)
abstract public function favouriteSubject()
)
class Radha extends Student (
public function favouriteSubject() (
return "English";
)
)
$obj = new Student; //this statement throws error as we cannot create object of class Student as it is defined as abstract
$obj = new Radha; //this statement does not throws error and executes correctly
$obj->favouriteSubject();
?>

Resultado :

Exemplo 2

Este exemplo é explicado passo a passo abaixo, após a saída do programa, juntamente com o código deste exemplo.

Código

abstract class Student(
protected $m;
abstract public function calulatePercentage();
public function setMarks($marks) (
return $this->m = $marks;
)
public function favoriteSubject() (
return 'Favorite subject is English';
)
)
class Ram extends Student(
public function calulatePercentage()(
$percentage = ($this->m /100 ) * 100;
return 'The percentage of Ram is '.$percentage. '%' .'
';
)
)
class Sherry extends Student(
public function calulatePercentage()(
$percentage = ($this->m /100 ) * 100;
return 'The percentage of Sherry is '.$percentage. '%' .'
';
)
public function favoriteSubject() (
return 'Favorite subject is Maths';
)
)
$ram = new Ram();
$ram->setMarks(92);
echo $ram->calulatePercentage();
echo $ram->favoriteSubject();
echo ' ';
$sherry = new Sherry();
$sherry->setMarks(97);
echo $sherry->calulatePercentage();
echo $sherry->favoriteSubject();
abstract class Student(
protected $m;
abstract public function calulatePercentage();
public function setMarks($marks) (
return $this->m = $marks;
)
public function favoriteSubject() (
return 'Favorite subject is English';
)
)
class Ram extends Student(
public function calulatePercentage()(
$percentage = ($this->m /100 ) * 100;
return 'The percentage of Ram is '.$percentage. '%' .'
';
)
)
class Sherry extends Student(
public function calulatePercentage()(
$percentage = ($this->m /100 ) * 100;
return 'The percentage of Sherry is '.$percentage. '%' .'
';
)
public function favoriteSubject() (
return 'Favorite subject is Maths';
)
)
$ram = new Ram();
$ram->setMarks(92);
echo $ram->calulatePercentage();
echo $ram->favoriteSubject();
echo ' ';
$sherry = new Sherry();
$sherry->setMarks(97);
echo $sherry->calulatePercentage();
echo $sherry->favoriteSubject();

Resultado :

Uma classe abstrata pode ser denominada como um esqueleto para classes derivadas. Neste exemplo acima, declaramos a classe abstrata Student e uma propriedade chamada $ m para marcas do aluno.

Explicação do Exemplo # 2

abstract class Student (
abstract public function calulatePercentage();
)

Uma classe abstrata pode ser denominada como um esqueleto para classes derivadas. Neste exemplo, declaramos a classe abstrata e os métodos junto com outros métodos.

No exemplo acima, declaramos Alunos da classe abstrata com métodos abstratos para calcular a porcentagem do aluno, juntamente com as notas dadas.

Além disso, criamos métodos (que não são abstratos) para definir as marcas do aluno e obter a matéria favorita do aluno.

abstract class Student(
abstract public function calulatePercentage();
public function setMarks($marks) (
return $this->m = $marks;
)
public function favoriteSubject() (
return 'Favorite subject is English';
)
)

Para criar objetos da classe abstrata Student, temos que estender a classe Student e criar classes derivadas a partir dela. A classe base usa a palavra-chave extends para permitir que a classe base se estenda. Depois que a classe for estendida, agora podemos usar os métodos da classe base.

No exemplo acima, Ram é a classe derivada que estende a classe base Student. Ele usa a palavra-chave extends. Agora calculamos o método de porcentagem () para calcular a porcentagem de notas obtidas por Ram.

class Ram extends Student(
public function calulatePercentage()(
$percentage = ($this->m /100 ) * 100;
return 'The percentage of Ram is '.$percentage. '%' .'
';
)
)

Declarar mais uma classe que estende a classe base de Aluno para que possamos aprender mais.

No exemplo acima, criamos Sherry como a classe derivada criada a partir da classe base Student. Isso usa a palavra-chave extends. Ele tem duas funções, uma que foi declarada como abstrata, o método calulatePercentage () na classe base e a outra é o método favoriteSubject () que não é abstrato.

class Sherry extends Student(
public function calulatePercentage()(
$percentage = ($this->m /100 ) * 100;
return 'The percentage of Sherry is '.$percentage. '%' .'
';
)
public function favoriteSubject() (
return 'Favorite subject is Maths';
)
)

Agora, criamos o objeto da classe base e o objeto da classe derivada, que gera um erro. Porque não podemos instanciar a classe declarada como abstrata.

Assim, apenas o objeto da classe derivada pode ser criado. Uma vez feito isso, usando este objeto, chamaremos o método abstrato e não o método abstrato, como visto abaixo.

$ram = new Ram();
$ram->setMarks(92);
echo $ram->calculatePercentage();
echo $ram->favoriteSubject();
echo ' ';
$sherry = new Sherry();
$sherry->setMarks(97);
echo $sherry->calculatePercentage();
echo $sherry->favoriteSubject();
$ram = new Ram();
$ram->setMarks(92);
echo $ram->calculatePercentage();
echo $ram->favoriteSubject();
echo ' ';
$sherry = new Sherry();
$sherry->setMarks(97);
echo $sherry->calculatePercentage();
echo $sherry->favoriteSubject();

Conclusão

Neste artigo, espero que você tenha aprendido como a classe abstrata é declarada, como funciona, como é estendida usando a palavra-chave extends, como o método abstrato é declarado na classe base e como é implementado na classe derivada. Os exemplos explicados ajudarão você a aprender o conceito à vontade. Espero que tenha sido preparado para ser útil o suficiente para compreender e praticar mais.

Artigos recomendados

Este é um guia para a classe Abstract em PHP. Aqui discutimos Como a Classe Abstrata funciona em PHP com o código de exemplo e as saídas apropriadas. Você também pode consultar os seguintes artigos para saber mais -

  1. Objeto em PHP
  2. Constantes PHP
  3. Cookie em PHP
  4. Padrões em PHP
  5. Fatorial em PHP
  6. Constantes mágicas do PHP
  7. Classe abstrata em C ++
  8. Função Recursiva PHP
  9. Função Recursiva em Python
  10. Função Recursiva em C
  11. Função Recursiva em JavaScript