Cómo reutilizar el código PHP de manera efectiva introducción a los rasgos de PHP

Cómo reutilizar el código PHP de manera efectiva introducción a los rasgos de PHP

Originalmente desarrollado por Rasmus lerdorf En 1994, PHP es uno de los lenguajes de programación de propósito general más utilizado. Originalmente nacido como lenguaje de plantilla, durante los años se convirtió en un lenguaje totalmente caracterizado con adecuado Oop (Programación orientada a objetos) Soporte. Su última encarnación, 7.X, introdujo nuevas características como Declaración de tipo de retorno para funciones y grandes mejoras de rendimiento. PHP es un herencia única Idioma: Esto significa que una clase solo puede heredar para un padre o clase base. Para superar este problema, se introdujo una característica en el idioma: rasgos. En este artículo veremos cómo usarlo y cómo funciona.

En este tutorial aprenderás:

  • Cómo usar rasgos en PHP


Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema INDEPENDO DEL OS
Software Php
Otro Conocimiento de PHP y conceptos básicos de programación orientados a objetos
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
ps - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Introducción de rasgos

PHP es un lenguaje de herencia único: una clase infantil solo puede heredar de un solo padre . Esto podría plantear un problema en términos de reutilización de código, si la clase necesita heredar múltiples comportamientos: rasgos son una forma de resolver este problema. Veamos como. La forma en que creamos un rasgo es muy similar a la forma en que creamos una clase, pero una de las grandes diferencias entre rasgos y clases es que un rasgo no se puede instanciar, pero solo se puede usar dentro de una clase o dentro de otro rasgo. Crear un rasgo es fácil:

Copiar

El código contenido dentro de "Traitone" es muy trivial: solo registra un mensaje. Veamos cómo podemos usarlo dentro de una clase:

prueba de clase use traitone; 
Copiar

La clave aquí es el usar Palabra clave, que, cuando se usa dentro de una clase, "importemos" las funcionalidades agrupadas en el rasgo. Es difícil imaginar un caso en el que la clase que creamos anteriormente podría ser útil, ya que no tiene métodos ni propiedades propios. Dado que la clase utiliza el rasgo de "traitone", podemos, sin embargo, acceder al método "registro":

$ test = new test (); $ test-> log (); "Soy un método de traitone!" 
Copiar

Eso fue bastante fácil, pero lo que sucede cuando una clase ya tiene un método con el mismo nombre de uno incluido en el rasgo que usa ? Vamos a verificarlo. Agregamos un método de "registro" dentro de la clase de prueba:

prueba de clase use traitone; Función pública log () echo "Soy un método de la clase de prueba!";
Copiar

Si ahora llamamos al método de "registro", obtenemos un resultado diferente:

$ test = new test (); $ test-> log (); "Soy un método de la clase de prueba!"
Copiar

¿Qué pasaría si la clase de prueba no tuviera el método de "registro", pero lo heredó de una clase base que extendió?? Vamos a ver:

clase base public function log () echo "Soy un método de la clase base!"; La prueba de clase extiende la base use traitone; $ test = new test (); $ test-> log ();" Soy un método de traitone!"
Copiar

Como puede ver, tenemos "Soy un método de traitone!"Como resultado de invocar el método de registro. Esto significa que el Base El método de clase ha sido anulado por uno dentro del rasgo. La jerarquía a tener en cuenta aquí es simple. Dentro de una clase:

  1. Los rasgos anulan los métodos heredados;
  2. Métodos de clase actual anular los métodos de rasgo;

Usando múltiples rasgos

Dentro de una clase podemos usar múltiples rasgos: todo lo que tenemos que hacer es incluirlos después del usar Palabra clave, separada por una coma:

prueba de clase use traitone, traittwo; 
Copiar

Sin embargo, el uso de múltiples rasgos puede crear conflictos de nombre. A error fatal se devuelve si los rasgos tienen métodos con el mismo nombre:

Trait Traitone public function log () echo "Soy un método de traitone!"; Trait Traittwo public Function log () echo" Soy un método de Traittwo!"; prueba de clase use Traitone, Traittwo; Php Error fatal: el registro del método de rasgo no se ha aplicado, porque hay colisiones con otros métodos de rasgo 1
Copiar

¿Qué podemos hacer para resolver este tipo de conflictos?? Podemos usar el en lugar de operador, excluyendo el método que no queremos usar:

prueba de clase use traitone, traittwo traitone :: log en su lugar de traittwo; 
Copiar

La sintaxis es muy simple: especificamos que queremos usar el método "registro" del rasgo de traitone, resolviendo el conflicto. ¿Qué pasa si queremos hacer lo anterior?? Debemos crear un alias para ello. Podemos hacerlo con el uso de la como operador. En el siguiente ejemplo, alias alias "registrar" como "traittwo_log":

prueba de clase use traitone, traittwo traitone :: log en su lugar de traittwo; traittwo :: log como traittwo_log; 
Copiar

De esta manera, todavía podemos acceder al método "registro" de Traittwo, invocándolo como traittwo_log ()::

$ test = new test (); $ test-> log (); Soy un método de traitone! $ test-> traittwo_log (); Soy un método de Traittwo!
Copiar

Uso del operador AS para cambiar la visibilidad de un método de rasgo

Dentro de una clase, el como El operador también se puede utilizar para cambiar la visibilidad de un método importado como parte de un rasgo. En el ejemplo anterior, todos los métodos de los rasgos son público. Podemos cambiar esto dentro de la clase:

prueba de clase use Traitone log como protegido; 
Copiar

Con la sintaxis anterior, especificamos que el método de registro de "Traitone" debe usarse como protegido Incluso si se declaró originalmente con un público visibilidad. De hecho, si intentamos invocar el método de registro, recibimos un error:

$ test = new test (); $ test-> log (); ADVERTENCIA PHP: Error no capturado: Llame al método protegido Prueba :: log () desde el contexto "en el código de shell PHP: 1 
Copiar

Si proporcionamos un nombre para el alias, el cambio de visibilidad se aplicará al método alias, mientras que el original mantendrá su visibilidad:

prueba de clase use Traitone log como aliased_log protegido;  $ test = new test (); $ test-> log (); Soy un método de traitone! $ test-> aliased_log (); ADVERTENCIA PHP: Error no abierto: Llame a la prueba del método protegido :: aliased_log () del contexto "en el código de shell php: 1
Copiar

Métodos abstractos y estáticos dentro de un rasgo

Dentro de un rasgo podemos definir ambos abstracto y estático métodos. En el primer caso, el rasgo requerirá la clase que la use para proporcionar una implementación concreta del método. Se generará un error fatal si la clase no implementa el método o no se declara a sí mismo como abstracto:

Copiar

Un método de rasgo también se puede declarar y utilizar como estático:

Copiar

Propiedades de rasgo

No solo los métodos, sino también las propiedades se pueden definir dentro de los rasgos, la única regla a respetar es que si una propiedad se define dentro de un rasgo, la clase que lo utiliza no puede definir una propiedad con el mismo nombre, a menos que tenga el misma visibilidad y valor inicial. Aquí hay un ejemplo:

Copiar

El $ Nombre La propiedad se define en "Traitone" y también en la clase de "prueba". Ambos tienen la misma visibilidad (protegida), pero su valor inicial es diferente, por lo tanto, se consideran incompatibles, y esto resulta en un error fatal.

Pensamientos de cierre

En este artículo aprendimos a saber rasgos, una característica que mejora la reutilización del código en PHP. Vimos cómo los rasgos no se pueden instanciar, sino que solo se usan dentro de las clases, a través de la usar palabra clave. Vimos cuál es el orden de precedencia que se usa cuando un rasgo y la clase que se usa en los métodos de implementación con el mismo nombre, cómo resolver tales conflictos utilizando el en lugar de operador, y cómo crear alias para los métodos de rasgo y cómo es posible cambiar su visibilidad con el como operador.

Finalmente vimos cómo también es posible definir propiedades y métodos estáticos o abstractos dentro de un rasgo. Quiero saber más sobre PHP? Tenemos muchos artículos sobre el tema!

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • Cómo construir una aplicación Tkinter utilizando un objeto orientado ..
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Cómo trabajar con la API REST de WooCommerce con Python
  • Cómo comparar el rendimiento del disco en Linux
  • Cómo crear una pila de lámparas basada en Docker usando Docker en ..
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?
  • Cosas para instalar en Ubuntu 22.04
  • Cómo escribir extensiones de Nautilus con Nautilus-Python
  • Cómo propagar una señal a los procesos infantiles de una fiesta ..