La diferencia entre clases y objetos en PHP

Los estándares para el desarrollo de WordPress están pasando lentamente del código de procedimiento que no tiene una abstracción adecuada a un código más sólido y orientado al objeto. Este es un paso en la dirección correcta, pero no olvidemos dos cosas importantes que a menudo quedan fuera de estas discusiones: ingresar el código en una clase no lo hace “orientado a objetos”, y PHP orientado a los objetos no es, por definición, no está, por definición. , mejor. . Hoy, discutiremos qué es un objeto y cuál es su papel. Entonces podemos discutir lo que queremos decir con “programación orientada al objeto verdadero” y si realmente importa si su código es “verdadero OOP” o no.
Los objetos Matrix vs PHP tienen dos tipos de datos compuestos (también conocidos como compuesto): objetos y matriz. Los tipos de datos compuestos requieren composición: el proceso de combinar otros tipos de datos en una sola “unidad”. En idiomas puramente orientados a objetos, debemos componer tipos de datos disponibles como tipos primitivos. Cuando explicamos objetos y programación orientados a objetos, creo que es muy útil comenzar a hablar sobre matriz, que no son objetos. La diferencia fundamental entre una matriz PHP y un objeto es que no podemos cambiar las reglas de una matriz. El lenguaje PHP define lo que podemos y lo que no podemos hacer con una matriz y no hay forma de que su programa PHP cambie eso.
Por otro lado, los objetos tienen reglas definidas por el programa PHP en el que se ejecutan. Estas reglas son lo que llamamos clases. Mientras que cada matriz reproduce de acuerdo con la misma regla, cada objeto se reproduce de acuerdo con las reglas de los objetos y las reglas de la clase utilizadas para crearlos. En los tribunales, a veces las palabras “clase” y “objeto” se usan indistintamente, pero no deberían serlo. Como dije anteriormente, las clases son reglas para crear objetos, pero esos objetos no existen hasta que estén instanciadas. La instancia de la clase tiene lugar utilizando la nueva palabra clave. Si quiero una instancia de la clase WP_Query, podría crear una como esta: $ Products = new WP_Query (‘post_type’ => ‘Product’); La instanciación de una clase y el atractivo de una función son muy similares, pero las llamadas a las funciones no están precedidas por la nueva palabra clave. Cuando se instancia a una clase, su constructor se llama inmediatamente y cualquier argumento inyectado en la clase se transmite al constructor. Los constructores son un ejemplo de método Magic PHP. Estas son una forma de inyectar datos directamente en el objeto y también de ejecutar el código inmediatamente en el tribunal. Como has notado, envié una serie de argumentos a la clase WP_QUEY cuando instituí el objeto. Si mira dentro del WP_Query Builder, si el único argumento que acepta no está vacío, ese argumento se transmite al método de consulta de esa clase.
El método de consulta desencadena el proceso para el que se utiliza WP_Query: consulta de la base de datos para obtener publicaciones. Separar este método de constructor es un buen diseño, ya que evita que el constructor asumiera demasiadas responsabilidades. También nos permite controlar cuándo se realiza la consulta. Aunque la mayoría de las veces es bueno ejecutar la consulta de inmediato, la flexibilidad de que la separación () de __construct () es muy útil. Aunque WP_Query tiene muchas reglas, se aplican a todos los objetos o WP_Query, eso no significa que todos los objetos WP_QUEY sean los mismos. Esto se debe a que sus propiedades contendrán información diferente. Por ejemplo, mire este código: $ Products = new WP_Query ([post_type ‘=>’ Product ‘);
$ comandos = new WP_Query ([‘post_type’ => ‘shop_order’); Ahora tenemos dos instancias de la clase WP_QUEY. Cada uno contendrá publicaciones totalmente diferentes en la propiedad de sus publicaciones, pero la forma en que esas publicaciones han llegado allí y cómo se puede acceder o modificar es la misma. Qué ejemplo es un objeto en la última sección, hablamos sobre los objetos que fueron los tribunales del wp_quey. Lo que queremos decir es que estos objetos se crearon usando la clase WP_Query. Pero no olvidemos que las clases pueden ser subclase. Cuando un objeto es una instancia de una clase que extiende otra clase, entonces se considera una instancia de ambas clases.

Esta es una distinción importante, porque determina cómo funcionará la función IS_A (), así como las reglas de indicación de tipo. Si hago una clase que se extiende WP_QUEY, se considerará una instancia de WP_QUEY. Esta es una de las características de la herencia de los objetos que lo hacen tan útil. Supongamos que tenía una clase abstracta llamada “Social” y dos clases que lo extendieron llamados “Facebook” y “Twitter”. Puede identificar el tribunal de estas clases verificando si los tribunales “sociales” lo fueron. ¿Qué es ese $? Dentro de una clase, puede acceder al tribunal actual utilizando la variable especial $ esto. Fuera de una clase que no puede usar $ this o PHP generará un error. Dentro de una clase, use $ esto para acceder a las propiedades o métodos de esa clase. Variable $ esto siempre se refiere al objeto actual, independientemente de la clase en la jerarquía de herencia. Por otro lado, la palabra clave “yo” se refiere a la clase actual, no al tribunal actual. Las propiedades estáticas no son únicas para un objeto en particular, son únicas para una clase. La programación “verdadera” orientada a los objetos a menudo ve clases que realmente no representan un objeto notable. En cambio, son una colección de funciones relacionadas. En este caso, la clase actúa como un espacio de nombre. Esto puede o no ser algo malo. Siempre debemos probar estas situaciones sobre una base de caso. En mi opinión, es limitado si el código podría reescribirse como una colección de funciones que no estaban contenidas en una clase. Digo esto porque escribir una clase, solo para evitar usar prefijos de funciones únicos no es una excusa para usar una clase y es menos eficiente y menos flexible.
Si la única utilidad de una clase es evitar el uso de prefijos únicos, ¿por qué no agrupar las funciones en un archivo y usar un espacio de nombres en ese archivo? Pero, tenga en cuenta que las clases tienen herencia, visibilidad y propiedades, que un grupo de funciones no tiene. Estas son razones perfectas para usar una clase, incluso cuando no es “verdadero” PHP orientado a objetos. En estas situaciones, a menudo tienes que lidiar con una clase en la que una instancia es indiscutible de la siguiente. La instanciación de estas clases en objetos y la búsqueda de estos objetos es casi siempre un olor malo e inútil. En estas situaciones, a menudo es mejor declarar todos los métodos de la clase estática, por lo que la corte es inútil. Muchas personas le dirán que solo porque usa una clase no significa que use la programación orientada a objetos. Ellos están en lo correcto. Solo recuerde que la programación orientada al objeto no es categóricamente mejor que las alternativas.

Copyright statement: Unless otherwise noted, this article is Collected from the Internet, please keep the source of the article when reprinting.

Check Also

gkOVSBm5B8SgiXmo

Shopify vs WooCommerce – ¿Cuál es la mejor plataforma?(Comparación)

Shopify vs WooCommerce

Leave a Reply

Your email address will not be published. Required fields are marked *