Programación orientada a objetos en WordPress Herencia II

En el artículo anterior, introdujimos el concepto de herencia orientada a objetos, intentamos colocar los términos de los laicos y luego analizamos el modelo conceptual de cómo funciona en el contexto de la programación..

Pero antes de continuar y / o si simplemente te unes a la serie, revisa todo lo que hemos cubierto hasta ahora leyendo los artículos anteriores:

  1. Una introducción
  2. Las clases
  3. Los tipos
  4. Estructuras de control: sentencias condicionales
  5. Estructuras de control: Bucles
  6. Funciones y atributos
  7. Alcance
  8. Construyendo el Plugin I
  9. Construyendo el Plugin II
  10. Documentar el Plugin I
  11. Documentar el Plugin II
  12. Herencia I

Sí, hemos cubierto mucho, pero para sentar las bases para que un principiante tenga un lugar sólido desde el cual comenzar a escribir PHP orientado a objetos, hay mucho que examinar.

Dicho esto, la herencia es donde comenzamos a entrar en los temas intermedios del paradigma, por lo que este será el artículo final que ofrece un vistazo a los conceptos para principiantes, luego de los cuales finalizaremos la serie con una publicación resumida..

Herencia Revisada

Recordemos que definimos la herencia como la siguiente:

La herencia es cuando una clase sirve como la clase principal para una clase secundaria que proporciona una serie de atributos y métodos comunes tanto para el padre como para el hijo; Sin embargo, el niño como la habilidad de introducir sus propios atributos..

Es un poco menos formal de lo que puedes encontrar en un libro académico, o incluso en Wikipedia, pero aún así explica la idea en términos que ilustran el punto..

En este artículo, revisaremos todo el código necesario, las funciones y las palabras reservadas relacionadas con el tema, vamos a echar un vistazo a cómo podemos implementarlo dentro de PHP de una manera muy, muy sencilla para la plataforma. Y luego revisaremos una implementación real de dónde está en juego la herencia dentro de WordPress.

Así que con ese conjunto como nuestra hoja de ruta para el artículo, sigamos adelante y comencemos.

Instalaciones PHP

Para implementar la herencia en PHP orientado a objetos, hay una serie de palabras reservadas con las que necesitamos familiarizarnos. Afortunadamente, la mayoría de las palabras que ya hemos cubierto, y las que no tenemos son lo suficientemente claras como para que sea fácil de recordarlas..

Entonces, antes de sumergirnos en el código, echemos un vistazo a todas las palabras reservadas en el idioma que necesitamos saber para poder comenzar a crear algo..

  • se extiende es una palabra reservada que indica que una clase es el hijo de otra clase. Por ejemplo, en nuestro artículo anterior, un Enviar se extiende Contenido. Veremos esto en juego pronto..
  • privado es un atributo que se aplica a las propiedades y funciones que significa que son accesibles solamente Dentro del contexto de la clase en la que se definen..
  • protegido es parecido a privado con la excepción de que las propiedades y los métodos que están marcados como tales pueden ser accedidos por la clase dada y cualquier clase secundaria.
  • público es lo opuesto a privado en el sentido de que significa que cualquier clase (la clase dada, una subclase o una clase de terceros) puede acceder a la propiedad o al método para cambiar su información o llamar a la función.

También necesita estar familiarizado con el :: operador, pero lo veremos un poco más adelante en el artículo cuando comencemos a ver el código.

Y eso es todo, nada terriblemente intimidante, ¿verdad? Y lo que es aún mejor es que si ha estado siguiendo con nosotros a lo largo de esta serie, es probable que esté familiarizado con cada palabra, excepto para se extiende.

De todos modos, dicho esto, comencemos a trabajar en un ejemplo..

Algún código de ejemplo

Para comenzar a escribir algún código de ejemplo, debemos establecer exactamente qué es lo que vamos a intentar modelar (después de todo, eso es lo que hace el código, ¿no es así?). 

Para mantener la coherencia con el tema utilizado en esta serie, especialmente en el último artículo, tendremos una clase para padres llamada Contenido, y dos clases para niños, cada una de las cuales será nombrada. Comentario y Enviar, respectivamente.

Esto nos permitirá ver cómo existen las propiedades y los métodos dentro de una sola clase, y cómo los niños pueden acceder a los atributos de sus padres, así como cómo los padres pueden proteger sus propiedades y funciones de sus hijos, también.

Pero la implementación demostrará mucho más que hablar de ello, así que comencemos a escribir algo de código..

La clase de los padres

En nuestro ejemplo, la clase padre será la Contenido porque ambas subclases, es decir, la Enviar y el Comentario - son tipos de contenido que tienen información única asociada que no es específica de la Contenido clase.

La clave de la herencia es identificar todas las propiedades y métodos que son comunes en todas las clases y mantenerlas definidas en la clase principal o, en nuestra clase, en Contenido.

Aunque esto puede variar según cómo lo veas, configuraremos Contenido tal que incluye:

  • Una fecha en la que se publicó el contenido.
  • un autor 
  • Un método para guardar el contenido.
  • Un método para formatear el contenido.
  • Un método para recuperar el contenido.
  • y un método para recuperar el autor del contenido. 

Primero, veremos el código, luego explicaremos todo lo que está sucediendo..

publish_date = $ date-> format ('Y-m-d H: i: s'); $ this-> author = "; función pública guardar ($ author, $ content) $ this-> author = $ author; $ this-> content = $ this-> format_content ($ content); $ this-> content ; public function read () return $ this-> content; private function format_content ($ content) return strip_tags (stripslashes ($ content)); public function get_author () return $ this-> author;

Como se mencionó anteriormente, tenemos dos protegido atributos y un privado atributo. Recuerde que esto significa que todas las subclases pueden acceder a la $ publish_date y el $ autor, pero solamente la Contenido puede acceder a la $ contenido atributo.

También tenga en cuenta que gran parte del código que ve en la clase anterior es PHP básico orientado a objetos. No hay nada que se destaque que se relacione directamente con la herencia, aparte de algunos de los modificadores de acceso que hemos declarado. Es decir, es relativamente común codificar lo que hemos visto hasta ahora en este tutorial..

Una de las cosas que vale la pena mencionar es que la función privada está en su lugar para demostrar dos cosas:

  1. Cómo privado Las funciones solo son accesibles dentro del contexto de la clase en la que se define su.
  2. Elimina cualquier etiqueta y barra diagonal del contenido para que el marcado no se pueda guardar con el contenido.

Por supuesto, este código no está conectado a una base de datos o un sistema de archivos o algo así, pero el punto sigue siendo.

Tenga en cuenta que, en el código anterior, hay un par de cosas que necesitamos agregar para satisfacer los requisitos de PHP. Están más allá del alcance de este artículo, pero vale la pena señalarlo aquí:

  • El código para date_default_time_set es necesario para establecer la zona horaria fuera de la cual se puede recuperar el tiempo.
  • El constructor es responsable de establecer inicialmente la fecha de publicación del contenido e inicializa la propiedad del autor en una cadena vacía. Esto es para que un Enviar puede tener su propio autor y el Comentario También puede tener su propio autor. Como veremos más adelante, un Comentario Incluso puede anular la fecha de publicación predeterminada.

Tenga en cuenta también que somos capaces de recuperar el contenido de la leer Método y somos capaces de obtener el autor de la obtener_autor función.

El primer niño

A continuación, vamos a seguir adelante y crear la Enviar subclase Primero, echaremos un vistazo al código y luego veremos cómo interactúa con el código. Contenido clase que acabamos de crear.

autor = 'Tom McFarlin';  publicación de función pública ($ contenido) $ this-> format_content ($ contenido); 

La clase parece pequeña, ¿verdad? No hay propiedades, porque las hereda de la Contenido clase - y solo hay dos funciones, una de las cuales es exclusiva de la clase - enviar.

Observe que en el constructor, primero hacemos una llamada al constructor principal usando el :: operador. Puede leer mucho más sobre esto en el manual, pero basta con decir que el operador está reservado para hacer referencia a una cantidad de cosas diferentes fuera de la clase en la que está definido. En nuestro caso, esa es la llamada al constructor del padre..

A continuación, opté por establecer mi nombre como el autor de la publicación. Note que estoy usando el $ esto palabra clave. Debido a que la subclase hereda las propiedades de su padre, puede referirse a esas propiedades y si se definieron dentro de sí mismas..

Tenga en cuenta que esto es posible no solo porque Publicar amplía el contenido sino porque la propiedad está marcada como protegido en Contenido, también. Si estuviera marcado como privado, esto no seria posible.

El segundo hijo

Ahora que hemos creado el Enviar clase, también tenemos la Comentario clase que, recuerda, representa a alguien que deja un comentario en una publicación. Si se tratara de este código de nivel de producción, habría mucho más código: tendríamos que relacionar un comentario con una publicación, determinar si un comentario es una respuesta a un comentario existente, marcar el estado de un comentario, etc..

Pero con el propósito de demostrar herencia, Estamos dejando todo eso y enfocándonos solo en las cosas que pueden impulsar los conceptos.

guardar ('John Doe', $ comentario); 

Como puedes ver, la Comentario El código no es muy diferente del Enviar código. Hasta cierto punto, esto es bueno porque muestra que hemos abstraído las partes adecuadas en nuestra clase base. 

De todos modos, note que después construimos el Comentario, Hacemos nuestro llamado al constructor padre. A continuación, definimos la añadir método que es responsable de tomar el comentario entrante y luego guardarlo al pasar el autor del comentario y está contento a la salvar método.

Lo bueno es que el salvar El método ya está definido dentro de la clase base que también maneja todo el formato mediante el uso de un privado función, por lo que ganamos esa funcionalidad a medida que creamos nuestra clase secundaria.

Trabajando con el ejemplo

Una vez hecho esto, vamos a ejecutar un par de ejemplos para mostrar cómo encajan las piezas. Para asegurarse de que este código se ejecute, todo lo que necesita es un servidor web, un directorio para ejecutar scripts de PHP y un editor de texto..

Primero, crearemos una instancia de Contenido y luego llamaremos una declaración de depuración para que podamos ver lo que constituye una instancia de la clase.

$ contenido = nuevo contenido (); var_dump ($ contenido);

Permitiendo que todo funcione correctamente, deberías ver todo lo que está arriba..

A continuación, vamos a seguir adelante y crear una publicación. Ya que estamos configurando toda la información en el contexto de la clase, todo lo que necesitamos hacer es llamar a una función en la clase para mostrar la información..

Por ejemplo:

$ post = nuevo Post (); echo 'El post autor es:'. $ post-> get_author ();

Nuevamente, ya que hemos configurado todo en el propio código, simplemente llamando al método se demuestra el concepto.

Finalmente, podemos crear una Comentario, llama a añadir En una instancia de la clase, intente pasar un código malicioso (solo para verlo eliminado por nuestro código). Si todo va bien, deberías ver lo siguiente:

$ comment = new Comment (); $ comentario-> añadir (''); echo 'El comentario dice:'. $ comentario-> leer ();

Y eso es todo: nuestra simple demostración de herencia..

Herencia en WordPress

Cuando se trata de ver la herencia en WordPress, lo primero que me viene a la mente, y probablemente a otros desarrolladores, es la API de widgets. La razón por la que digo esto es porque la API está alimentada por herencia.

Claro, los widgets pueden crearse sin usar la API, pero yo diría que es un paso en falso en el desarrollo. ¿Por qué hacer las cosas más complicadas para ti mismo cuando ya hay una base para hacerlo? Pero yo divago.

Lo bueno de esta API en particular es que muestra todos los puntos altos de la programación orientada a objetos y la herencia en el trabajo. Por ejemplo, aquí hay un fragmento de código de muestra tomado directamente del Codex:

Ahora que hemos cubierto el modelo conceptual, analizamos las palabras clave y la metodología, escribimos nuestro propio código y creamos nuestro propio ejemplo, esto debería ser relativamente fácil de seguir..

Pero aquí está la cuestión: una de las mejores maneras de mejorar en la escritura de cualquier tipo de código es practicar continuamente los conceptos. Es decir, para explorar las ideas escritas por otras personas que han hecho cosas más avanzadas que usted en trabajos anteriores..

Caso en cuestión, eche un vistazo al primer ejemplo proporcionado en el Códice de WordPress. Y si está trabajando con una versión posterior de PHP que admite funciones como los espacios de nombres (un tema un poco más avanzado), también puede ver el segundo ejemplo..

Cuanto más revise el código y lo separe, más tendrá que aprenderlo. Pero ir más lejos que en este artículo nos llevará fuera del alcance de toda la serie..

Hasta el final

En este punto, hemos cubierto todo el material para principiantes necesario para sentar las bases de una guía para principiantes para escribir PHP orientado a objetos. En el artículo final, proporcionaremos un resumen de todo lo que hemos cubierto para que tengamos una única referencia para las grandes ideas que se pueden marcar, guardar o consultar más adelante..

Además, tendremos un breve período de discusión sobre una serie de seguimiento, pero lo guardaremos hasta entonces.

Por ahora, si tiene preguntas, comentarios y / o comentarios sobre el contenido, el código o los ejemplos anteriores, siéntase libre de hacerlo en la sección de comentarios a continuación..