Como reutilizar o código PHP de maneira eficaz - Introdução às características do PHP

Como reutilizar o código PHP de maneira eficaz - Introdução às características do PHP

Originalmente desenvolvido por Rasmus Lerdorf Em 1994, o PHP é uma das linguagens de programação de uso geral mais usadas. Originalmente nascido como uma linguagem de modelo, durante os anos evoluiu para uma linguagem totalmente feita com adequado OOP (Programação orientada a objetos) Suporte. Sua última encarnação, 7.x, introduziu novos recursos como Declaração do tipo de retorno Para funções e enormes melhorias de desempenho. PHP é a herança única Idioma: Isso significa que uma classe pode herdar apenas para um pai ou aula base. Para superar esse problema, um recurso foi introduzido no idioma: características. Neste artigo, veremos como usá -lo e como funciona.

Neste tutorial, você aprenderá:

  • Como usar características em php


Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Independente do OS
Programas Php
Outro Conhecimento de PHP e conceitos básicos de programação orientados a objetos
Convenções # - requer que os comandos Linux sejam executados com privilégios root diretamente como usuário root ou por uso de sudo comando
$ - Requer que os comandos do Linux sejam executados como um usuário não privilegiado regular

Apresentando características

PHP é uma linguagem de herança única: uma classe infantil pode herdar apenas de um pai solteiro . Isso pode representar um problema em termos de reutilização de código, se a classe precisar herdar vários comportamentos: características são uma maneira de resolver este problema. Vamos ver como. A maneira como criamos uma característica é muito semelhante à maneira como criamos uma classe, mas uma das grandes diferenças entre características e classes é que uma característica não pode ser instanciado, mas só pode ser usado dentro de uma classe ou dentro de outra característica. Criando uma característica é fácil:

cópia de

O código contido dentro de "traçone" é muito trivial: apenas registra uma mensagem. Vamos ver como podemos usá -lo dentro de uma aula:

classe teste use traçone; 
cópia de

A chave aqui é o usar Palavra -chave, que, quando usada dentro de uma classe, vamos "importar" as funcionalidades agrupadas na característica. É difícil imaginar um caso em que a classe que criamos acima pode ser útil, pois não possui métodos ou propriedades. Como a aula faz uso da característica "traçone", podemos, no entanto, acessar o método "log":

$ test = new test (); $ test-> log (); "Eu sou um método de traçone!" 
cópia de

Isso foi bem fácil, mas o que acontece quando uma aula já tem um método com o mesmo nome de um incluído na característica que usa ? Vamos verificar isso. Adicionamos um método de "log" dentro da classe de teste:

classe teste use traçone; Public Function Log () echo "Eu sou um método da classe de teste!";
cópia de

Se agora chamamos o método "log", obtemos um resultado diferente:

$ test = new test (); $ test-> log (); "Eu sou um método da aula de teste!"
cópia de

E se a classe de teste não tivesse um método de "log", mas herdasse de uma classe base que se estendia? Vamos ver:

classe base public function log () echo "Eu sou um método da classe base!";, o teste da classe estende a base use traitone; $ test = new test (); $ test-> log ();" eu sou um método de traçone!"
cópia de

Como você pode ver, temos “Eu sou um método de traçone!”Como resultado de invocar o método de log. Isso significa que o Base O método de classe foi substituído por aquele dentro da característica. A hierarquia a ter em mente aqui é simples. Dentro de uma aula:

  1. Características substituem métodos herdados;
  2. Os métodos de classe atual substituem os métodos de características;

Usando várias características

Dentro de uma aula, podemos usar várias características: tudo o que precisamos fazer é incluí -las após o usar Palavra -chave, separada por uma vírgula:

classe Test Use Traitone, Traittwo; 
cópia de

O uso de várias características, no entanto, pode criar conflitos de nomes. A erro fatal é retornado se as características tiverem métodos com o mesmo nome:

traço traitone public function log () echo "eu sou um método de traitone!"; traço traitwo public function log () echo" eu sou um método de traittwo!"; Teste de classe Use traitone, traittwo; PHP Fatal Erro: o log do método de característica não foi aplicado, porque existem colisões com outros métodos de característica 1
cópia de

O que podemos fazer para resolver esse tipo de conflito? Podemos usar o em vez de operador, excluindo o método que não queremos usar:

classe Test Use Traitone, Traittwo trabone :: LOG em vez de traittwo; 
cópia de

A sintaxe é muito simples: especificamos que queremos usar o método "log" da característica Traitone, resolvendo o conflito. E se quisermos fazer como acima, mas ainda queremos manter a funcionalidade fornecida pelo método "log" de Traittwo? Devemos criar um Alias para isso. Podemos fazer isso com o uso do como operador. No exemplo a seguir, alias, o método "log" como "traittwo_log":

classe Test Use Traitone, Traittwo trabone :: LOG em vez de traittwo; TRAITTWO :: Log como traittwo_log; 
cópia de

Dessa forma, ainda podemos acessar o método "log" de Traittwo, invocando -o como traittwo_log ():

$ test = new test (); $ test-> log (); Eu sou um método de traçone! $ test-> traittwo_log (); Eu sou um método de traittwo!
cópia de

Usando o operador AS para alterar a visibilidade de um método de característica

Dentro de uma aula, o como O operador também pode ser usado para alterar a visibilidade de um método importado como parte de uma característica. No exemplo anterior, todos os métodos das características são público. Podemos mudar isso dentro da aula:

classe Test use traitone log como protegido; 
cópia de

Com a sintaxe acima, especificamos que o método de log de "traitone" deve ser usado como protegido Mesmo que fosse originalmente declarado com um público visibilidade. De fato, se tentarmos invocar o método de log, recebemos um erro:

$ test = new test (); $ test-> log (); Aviso de PHP: Erro não capturado: Call to Protected Method Test :: Log () do Contexto "No PHP Shell Código: 1 
cópia de

Se fornecermos um nome para o pseudônimo, a mudança de visibilidade será aplicada ao método Aliases, enquanto o original manterá sua visibilidade:

classe Test Use Traitone Log como Aliased_log protegido;  $ test = new test (); $ test-> log (); Eu sou um método de traçone! $ test-> aliased_log (); Aviso de PHP: Erro não capturado: Call to Protected Method Test :: Aliased_log () do Contexto "No Código Php Shell: 1
cópia de

Métodos abstratos e estáticos dentro de uma característica

Dentro de uma característica, podemos definir os dois abstrato e estático métodos. No primeiro caso, a característica exigirá a classe que a usa para fornecer uma implementação concreta do método. Um erro fatal será gerado se a classe não implementar o método ou não for declarada como abstrata:

cópia de

Um método de característica também pode ser declarado e usado como estático:

cópia de

Propriedades de características

Não apenas métodos, mas também as propriedades podem ser definidas dentro de características, a única regra a respeitar é que, se uma propriedade for definida dentro de uma característica, a classe que utiliza não pode definir uma propriedade com o mesmo nome, a menos que tenha o mesma visibilidade e valor inicial. Aqui está um exemplo:

cópia de

O $ nome A propriedade é definida em "Traitone" e também na classe "Teste". Ambos têm a mesma visibilidade (protegida), mas seu valor inicial é diferente, portanto, são considerados incompatíveis, e isso resulta em um erro fatal.

Pensamentos finais

Neste artigo, aprendemos a saber características, Um recurso que aprimora a reutilização do código no PHP. Vimos como as características não podem ser instanciadas, mas usadas apenas dentro das classes, através do usar palavra -chave. Vimos qual é a ordem de precedência usada quando uma característica e a classe é usada nos métodos de implemento com o mesmo nome, como resolver tais conflitos usando o em vez de operador e como criar aliases para os métodos de característica e como é possível mudar sua visibilidade com o como operador.

Finalmente vimos como também é possível definir propriedades e métodos estáticos ou abstratos dentro de uma característica. Quero saber mais sobre PHP? Temos muitos artigos sobre o assunto!

Tutoriais do Linux relacionados:

  • Coisas para instalar no Ubuntu 20.04
  • Como construir um aplicativo Tknter usando um objeto orientado…
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Como trabalhar com a API de Rest WooCommerce com Python
  • Como comparar o desempenho do disco no Linux
  • Como criar uma pilha de lâmpadas à base de docker usando o docker em…
  • Mint 20: Melhor que o Ubuntu e o Microsoft Windows?
  • Coisas para instalar no Ubuntu 22.04
  • Como escrever extensões de Nautilus com Nautilus-python
  • Como propagar um sinal para os processos filhos de uma festa…