Tutorial PHP

PHP INÍCIO Introdução ao PHP Instalação do PHP Sintaxe PHP Comentários PHP Variáveis ​​PHP PHP Eco/Impressão Tipos de dados PHP Strings PHP Números PHP Matemática PHP Constantes PHP Operadores PHP PHP If...Else...Elseif Chave PHP Loops PHP Funções PHP Matrizes PHP PHP Superglobais PHP RegEx

Formulários PHP

Manipulação de formulários PHP Validação de formulário PHP Formulário PHP obrigatório URL/e-mail do formulário PHP Formulário PHP completo

PHP Avançado

Data e hora do PHP Incluir PHP Manipulação de arquivos PHP Arquivo PHP Abrir/Ler Arquivo PHP Criar/Gravar Upload de arquivo PHP Cookies PHP Sessões PHP Filtros PHP Filtros PHP Avançados Funções de retorno de chamada do PHP PHP JSON Exceções do PHP

PHP OOP

PHP O que é POO Classes/objetos PHP Construtor PHP Destruidor PHP Modificadores de acesso PHP Herança PHP Constantes PHP Classes abstratas PHP Interfaces PHP Características PHP Métodos estáticos PHP Propriedades estáticas do PHP Namespaces PHP Iteráveis ​​PHP

Banco de dados MySQL

Banco de dados MySQL MySQL Connect MySQL Criar banco de dados MySQL Criar Tabela Dados de inserção do MySQL MySQL Obter Último ID MySQL Inserir Múltiplo Preparado para MySQL Dados de seleção do MySQL MySQL Onde MySQL Ordenar por Dados de exclusão do MySQL Dados de atualização do MySQL Dados de limite do MySQL

PHP XML

Analisadores XML PHP Analisador PHP SimpleXML PHP SimpleXML - Obter PHP XML Expatriado PHP XML DOM

PHP - AJAX

Introdução AJAX PHP AJAX Banco de dados AJAX XML AJAX Pesquisa em tempo real AJAX Enquete AJAX

Exemplos PHP

Exemplos PHP Compilador PHP Teste PHP Exercícios PHP Certificado PHP

Referência PHP

Visão geral do PHP Matriz PHP Calendário PHP Data do PHP Diretório PHP Erro PHP Exceção PHP Sistema de arquivos PHP Filtro PHP PHP FTP PHP JSON Palavras-chave PHP PHP Libxml Correio PHP Matemática PHP PHP Diversos PHP MySQLi Rede PHP Controle de saída PHP PHP RegEx PHP SimpleXML Fluxo PHP String PHP Manipulação de variáveis ​​PHP Analisador XML PHP PHP Zip Fusos horários PHP

PHP OOP - Classes Abstratas


PHP - O que são classes e métodos abstratos?

Classes e métodos abstratos são quando a classe pai tem um método nomeado, mas precisa de sua(s) classe(s) filha(s) para preencher as tarefas.

Uma classe abstrata é uma classe que contém pelo menos um método abstrato. Um método abstrato é um método declarado, mas não implementado no código.

Uma classe ou método abstrato é definido com a abstract palavra-chave:

Sintaxe

<?php
abstract class ParentClass {
  abstract public function someMethod1();
  abstract public function someMethod2($name, $color);
  abstract public function someMethod3() : string;
}
?>

Ao herdar de uma classe abstrata, o método da classe filha deve ser definido com o mesmo nome e o mesmo ou um modificador de acesso menos restrito. Portanto, se o método abstrato for definido como protegido, o método da classe filho deve ser definido como protegido ou público, mas não privado. Além disso, o tipo e o número de argumentos necessários devem ser os mesmos. No entanto, as classes filhas podem ter argumentos opcionais.

Assim, quando uma classe filha é herdada de uma classe abstrata, temos as seguintes regras:

  • O método da classe filho deve ser definido com o mesmo nome e redeclara o método abstrato pai
  • O método de classe filho deve ser definido com o mesmo modificador de acesso ou menos restrito
  • O número de argumentos necessários deve ser o mesmo. No entanto, a classe filha pode ter argumentos opcionais além

Vejamos um exemplo:

Exemplo

<?php
// Parent class
abstract class Car {
  public $name;
  public function __construct($name) {
    $this->name = $name;
  }
  abstract public function intro() : string;
}

// Child classes
class Audi extends Car {
  public function intro() : string {
    return "Choose German quality! I'm an $this->name!";
  }
}

class Volvo extends Car {
  public function intro() : string {
    return "Proud to be Swedish! I'm a $this->name!";
  }
}

class Citroen extends Car {
  public function intro() : string {
    return "French extravagance! I'm a $this->name!";
  }
}

// Create objects from the child classes
$audi = new audi("Audi");
echo $audi->intro();
echo "<br>";

$volvo = new volvo("Volvo");
echo $volvo->intro();
echo "<br>";

$citroen = new citroen("Citroen");
echo $citroen->intro();
?>

Exemplo explicado

As classes Audi, Volvo e Citroen são herdadas da classe Car. Isso significa que as classes Audi, Volvo e Citroen podem usar a propriedade public $name, bem como o método public __construct() da classe Car devido à herança.

Mas, intro() é um método abstrato que deve ser definido em todas as classes filhas e elas devem retornar uma string.



PHP - Mais Exemplos de Classes Abstratas

Vejamos outro exemplo onde o método abstract tem um argumento:

Exemplo

<?php
abstract class ParentClass {
  // Abstract method with an argument
  abstract protected function prefixName($name);
}

class ChildClass extends ParentClass {
  public function prefixName($name) {
    if ($name == "John Doe") {
      $prefix = "Mr.";
    } elseif ($name == "Jane Doe") {
      $prefix = "Mrs.";
    } else {
      $prefix = "";
    }
    return "{$prefix} {$name}";
  }
}

$class = new ChildClass;
echo $class->prefixName("John Doe");
echo "<br>";
echo $class->prefixName("Jane Doe");
?>

Vejamos outro exemplo onde o método abstrato tem um argumento e a classe filha tem dois argumentos opcionais que não estão definidos no método abstrato do pai:

Exemplo

<?php
abstract class ParentClass {
  // Abstract method with an argument
  abstract protected function prefixName($name);
}

class ChildClass extends ParentClass {
  // The child class may define optional arguments that are not in the parent's abstract method
  public function prefixName($name, $separator = ".", $greet = "Dear") {
    if ($name == "John Doe") {
      $prefix = "Mr";
    } elseif ($name == "Jane Doe") {
      $prefix = "Mrs";
    } else {
      $prefix = "";
    }
    return "{$greet} {$prefix}{$separator} {$name}";
  }
}

$class = new ChildClass;
echo $class->prefixName("John Doe");
echo "<br>";
echo $class->prefixName("Jane Doe");
?>