O que é substituição em PHP?

Overriding é um conceito de Programação Orientada a Objetos que é semelhante a um conceito como Classe, Objeto, Encapsulamento, Polimorfismo, Sobrecarga, etc, em PHP. A substituição de funções e classes é feita quando um método na classe derivada é criado, o mesmo que o método da classe base ou da classe pai. Ambos os métodos têm o mesmo nome e o mesmo número de argumentos.

Como funciona a substituição?

  • Substituir é um conceito em que a classe derivada da classe base executa a mesma ação que a classe base. Essa substituição pode estar em métodos ou classes. Se for a substituição do método, o nome do método, os parâmetros, o especificador de acesso será o mesmo que o método da classe pai. Onde não há alteração encontrada na implementação do método na subclasse derivada da classe base, na época diz-se que o método da subclasse substituiu o método da classe base.
  • Suponha que exista uma classe chamada Pessoa que possua suas próprias propriedades e métodos de dados. Esta é a pessoa principal ou de classe base com um método chamado speak (). Agora há mais uma classe chamada Employee que estende a classe Person. Agora, essa classe Employee tem suas próprias propriedades e métodos de dados e também possui um método igual ao da classe pai, por exemplo, speak ().
  • Este método speak () está presente na classe base e também na classe derivada.
  • Agora, o que acontece é quando a classe é instanciada ou quando o objeto é criado, qual do método speak () será executado, o que significa que a fala da classe base ou a fala da classe derivada é executada depende do objeto da classe é chamado.
  • Em outras palavras, se um objeto da classe Person for criado, o método speak () da classe Person será chamado e, portanto, executado. Mas se o objeto da classe Employee for criado, o método speak () da classe derivada será executado, substituindo a classe speak () da classe pai.
  • E aqui está como a substituição ocorre com um exemplo
  • No exemplo abaixo, existem duas classes, classe base e classe derivada. A classe derivada estende a classe base. Essas classes são iniciadas e dois objetos $ obj1 e $ obj2 são criados. $ obj1 é um objeto de BaseClass e $ obj2 é um objeto de uma classe derivada. Esses objetos ainda chamam os métodos declarados em suas respectivas classes.
  • Aqui você observará que a classe base e a classe derivada têm o mesmo método chamado ABC (). Ao executar esse programa, você notará que o método ABC () substituiu o método da classe base ABC ().

Exemplo de substituição de método

class BaseClass (
public function ABC() (
echo "
In the base class";
)
)
class DerivedClass extends BaseClass (
// override the method ABC() of base class
public function ABC() (
echo "
In the derived class";
)
)
$obj1 = new BaseClass;
$obj1->ABC();
$obj2 = new DerivedClass;
$obj2->ABC();

Resultado:

Substituindo com Modificadores de Acesso

Existem três modificadores de acesso.

  1. público: acessível de qualquer lugar do programa.
  2. privado: acessível apenas a partir da classe pai.
  3. protected: Acessível a partir da classe base e da classe derivada.

Como sabemos, o método protegido é acessível a partir de uma classe base e a classe derivada pode ser tornada pública na subclasse, mas não privada, pois privada só é acessível na classe pai. Além disso, se um método de classe tiver um especificador de acesso como público, o método de substituição na classe derivada não poderá ser declarado como privado e protegido

Exemplo de substituição de método usando modificadores de acesso

class BaseClass (
private function ABC() (
echo "
In the base class Method : ABC";
)
protected function XYZ() (
echo "
In the base class Method : XYZ";
)
)
class DerivedClass extends BaseClass (
// overriding with public for wider accessibility
public function ABC() (
echo "
In the derived class Method : ABC";
)
// overriding method
// with more accessibility
public function XYZ() (
echo "
In the derived class Method : XYZ";
)
)
//$obj1 = new BaseClass;
//$obj1->ABC(); //throws fatal error
//$obj1->XYZ(); //throws fatal error
$obj2 = new DerivedClass;
$obj2->ABC();
$obj2->XYZ();

resultado:

Substituindo pela palavra-chave final

A palavra-chave final é usada para classes e métodos. Métodos e classes, não variáveis ​​podem ser substituídas.

Substituição final do método

Quando um método ou uma classe é declarada como final, a substituição desse método ou classe não pode ser executada, também a herança com a classe não é possível.

Exemplo de substituição de método usando a palavra-chave final

class BaseClass (
// Final method – display
// this cannot be overridden in base class
final function display() (
echo "
In the Base class display function";
)
/// method - ABC
function ABC() (
echo "
In the Base cLass ABC function";
)
)
class DerivedClass extends BaseClass (
function ABC() (
echo "
In the Derived class ABC function";
)
)
$obj1 = new DerivedClass;
$obj1->display();
$obj1->ABC();

Resultado:

Substituição da classe final

Uma classe declarada como final não pode ser herdada. Uma Classe Final ainda possui o método final, juntamente com outros métodos. Mas como a própria classe é declarada final, não há como declarar um método final em uma classe final.

Exemplo de substituição de classe usando a palavra-chave final

// class declared as final cannot be overridden
final class BaseClass (
// method - ABC
function ABC() (
echo "
In the BaseClass Method ABC function";
)
// Final method - display
function display() (
echo "
In the BaseClass Method display function";
)
)
// here you cannot extend the base class
// as the base class is declared as final
$obj1 = new BaseClass;
$obj1->display();
$obj1->ABC();

Resultado:

Artigos recomendados

Este é um guia para substituir em PHP. Aqui discutimos o que está substituindo e funcionando o PHP e métodos diferentes, juntamente com o código de exemplo. Você também pode consultar os seguintes artigos para saber mais -

  1. Perguntas básicas da entrevista do PHP
  2. Vantagens do PHP
  3. Carreira em PHP
  4. Comandos PHP
  5. Guia para substituir em JavaScript
  6. Como substituir obras em C ++?
  7. Substituindo em OOPs | Necessidade de substituição de método
  8. Modificadores de acesso em PHP
  9. Substituindo em Java