Cómo reutilizar el código PHP de manera efectiva introducción a los rasgos de PHP
- 1138
- 216
- Sra. María Teresa Rentería
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
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 dominiops - 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:
- Los rasgos anulan los métodos heredados;
- 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 ..
- « Cómo crear, empaquetar y firmar una extensión web de Firefox
- Cómo habilitar Autologin en Kali Linux »