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.
- público: acessível de qualquer lugar do programa.
- privado: acessível apenas a partir da classe pai.
- 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 -
- Perguntas básicas da entrevista do PHP
- Vantagens do PHP
- Carreira em PHP
- Comandos PHP
- Guia para substituir em JavaScript
- Como substituir obras em C ++?
- Substituindo em OOPs | Necessidade de substituição de método
- Modificadores de acesso em PHP
- Substituindo em Java