Veo muchos complementos que utilizan codificación orientada a objetos cuando realmente no es necesario.
Pero lo que es aún peor es que los desarrolladores de temas están comenzando a hacer lo mismo. Los temas comerciales y los temas populares gratuitos como Suffusion, incluso mi tema favorito: Híbrido, guardan todas sus funciones dentro de una clase, lo instancian una vez en functions.php y ejecutan sus funciones de manera procesal :)
Wtf? ¿Cuál es el punto de hacer esto? Obviamente no usará dos o más instancias del mismo tema, al mismo tiempo.
Supongamos que los complementos hacen esto para el espacio de nombres (lo cual es ridículo), pero ¿cuál es la excusa del tema? ¿Me estoy perdiendo de algo?
¿Cuál es la ventaja de codificar un tema como este?
Respuestas:
Puedo entender su confusión según el ejemplo que proporcionó. Esa es realmente una forma pobre de usar una clase ... y solo porque se usa una clase, no hace que un sistema OOP.
En el caso de Hybrid, solo usan una clase para nombrar sus funciones. Teniendo en cuenta que Hybrid es un marco de temas , esto se hace para que los temas secundarios puedan reutilizar nombres de funciones sin que el desarrollador tenga que preocuparse por la colisión de nombres. En muchos casos, un marco temático (tema principal) es tan complejo que muchos desarrolladores de temas secundarios nunca entenderán exactamente lo que sucede debajo del capó.
Si Hybrid no usaba una estructura de clase, los desarrolladores de temas secundarios tendrían que saber cuáles eran todas las llamadas a funciones existentes para poder evitar la reutilización de nombres. Y sí, podría simplemente prefijar todas sus funciones con una babosa única, pero eso hace que el código sea difícil de leer, difícil de mantener e inherentemente no reutilizable si desarrolla sistemas adicionales que quieran utilizar la misma funcionalidad.
Para responder tu pregunta
No, no utilizará dos o más instancias del mismo tema. Pero como dije, piense en la estructura de clases en este caso como espacios de nombres de las funciones, no creando una instancia de objeto tradicional. Agrupar todo en una clase e instanciarlo para llamar a los métodos (
myClass->method();
) o llamar a los métodos directamente (myClass::method();
) es una forma muy limpia de espacios de nombres de manera legible y reutilizable.Por supuesto, siempre podría usar algo como en su
myClass_method();
lugar, pero si desea reutilizar cualquiera de este código en otro tema, en un complemento o en un marco de trabajo adicional, debe volver y cambiar todos sus prefijos. Mantener todo en una clase es más limpio y le permite volver a desarrollar y volver a implementar mucho más rápidamente.En la mayoría de las situaciones, estoy de acuerdo contigo. Sin embargo, esa mayoría está disminuyendo rápidamente. Alojo varios sitios en una instalación de MultiSite que usan variaciones del mismo tema. En lugar de volver a crear el mismo tema una y otra vez con pequeñas diferencias, tengo una sola "clase" para el tema principal y todos los temas secundarios amplían esa clase. Esto me permite definir una funcionalidad personalizada para cada sitio mientras mantengo un sentido general de uniformidad en toda la red.
Por un lado, los desarrolladores de temas pueden elegir un enfoque basado en clases para el espacio de nombres de su funcionalidad (lo cual no es ridículo si trabaja en un entorno donde reutiliza fragmentos del mismo código una y otra vez). Por otro lado, los desarrolladores de temas pueden elegir un enfoque basado en clases para facilitar la extensibilidad por temas secundarios.
Si solo usa Hybrid en su sitio, hay poco que conocer como ventaja para usted como usuario final. Si está creando un tema secundario para Híbrido, existen ventajas de espacio de nombres y extensibilidad. Si trabaja para ThemeHybrid , la ventaja radica en la reutilización de código rápida y eficiente en sus otros proyectos (Prototype, Leviathan, etc.).
Y si usted es un desarrollador de temas que le gusta una característica específica de Hybrid pero no el tema completo, la ventaja radica en la reutilización de código rápida y eficiente en su proyecto no híbrido (suponiendo que también sea GPL).
fuente
functions.php
puede ser muy poderoso.Velocidad
Mi tema base actual tiene 13 clases. Cuando construyo un nuevo tema, uso estas clases tal como están o las extiendo. Ese sistema hace que el proceso de construcción de un nuevo tema sea muy, muy rápido.
Ámbitos estrechos
Raramente necesito variables globales, porque todo lo que mi código tiene que saber está oculto en los miembros de la clase. Por lo tanto, puedo compartir una variable entre dos filtros o acciones muy diferentes sin riesgo de colisión con complementos mal escritos.
Mantenimiento
Cada clase es un archivo. Si necesito actualizar el tema de un cliente, simplemente actualizo algunos archivos. Lo que ocurra dentro de las clases depende de mí siempre que ofrezco la misma API.
Un ejemplo: encima de la
comment_form();
llamada, uso una acción simple:La clase de comentario que se cargará decide mi controlador. Lo que sucede exactamente dentro de la clase de comentarios decide la clase individual.
Pruebe esto con un enfoque de procedimiento puro y se volverá loco. :)
Legibilidad
Es mucho más fácil releer y comprender su propio código algunos meses después si ha separado todo por su tarea.
Algunos ejemplos de jerarquías de clases útiles.
Meta_Box
-> extendido porShortdesc_Meta_Box
ySimple_Checkbox_Meta_Box
-> extendido porSidebar_Switch
User_Profile_Addon
-> ampliado porUser_Profile_Checkbox
(véase la pregunta 3255 )Comment_Form
-> extendido por{$theme_name}_Comment_Form
fuente
Otro punto a considerar: la velocidad.
Después de un breve vistazo / impresión, encontré ~ 1.700 funciones internas y ~ 1.400 funciones de usuario = ~ 3.100 / 3.200 funciones VS. ~ 250 clases. Supongo que esto dice más sobre cuánto necesitaría una búsqueda. Si solicita
!function_exists('')
alrededor de 50-100 funciones en su tema ... simplemente configure un temporizador para una y luego comience a hacer algunas matemáticas. Incluso si no es OOP, es una buena manera de hacer código1) reutilizable
2) mantenible
3) intercambiable
4) un poco más rápido
Cuando echas un vistazo a diferentes clases que flotan en la web que te ayudan a hacer meta cuadros, widgets, etc. rápidamente, entonces es bueno usar un controlador como @toscho mencionado, porque puedes conectar y desconectar clases y simplemente reemplazar algunas líneas en el controlador que maneja tus clases.
fuente
Algunos argumentan que la encapsulación es el único (o al menos primario) beneficio que ofrece OOP, y que la herencia y el estado se encuentran entre aburridos y malvados:
http://obiecte.blogspot.com/2008/09/oop-sucks.html
El autor habla más sobre el uso de clases / objetos como estructuras que como contenedores para funciones estáticas, pero es interesante leer una opinión completamente diferente sobre la pregunta, de alguien que está directamente fuera del campamento de OOP.
Puedo escribir mi próximo complemento de WordPress en Haskell.
fuente
class
palabra clave.¡Oh, toda la discusión! Tengo que admitir también que uso clases para encapsular con mucha frecuencia. La idea es que en mis complementos, puedo ajustar mis funciones en una clase, y dentro de esa clase usar nombres de métodos muy simples y significativos que son genéricos, incluso entre otros complementos que escribo. En ese caso, las clases son un sustituto de los espacios de nombres, que me veo obligado a evitar para los entornos 5.2.x.
Si bien hay pocos casos en que OOP es útil para la modularidad, el simple acto de ajustar sus funciones también crea la ventaja adicional de la capacidad de ampliación de complementos cruzados. Por ejemplo, recientemente extendí una solución de facturación que estaba basada en la clase, y como tal podría extender la clase principal, agregar código adicional a varias funciones (w / parent :: calls) o incluso reemplazar funciones, todo sin internalizar el complemento extendido.
Sin embargo, en general, el ajuste de clase es solo un sustituto de espacios de nombres.
fuente
¿Qué sentido tiene quejarse del código que no escribió?
Si no te gusta el código, ¡escribe el tuyo!
Simple. Problema resuelto.
A los programadores les gusta hacer cosas a su manera. Así que no suponga que puede decirles cómo escribir código, qué tipo de whisky beber, qué marca de cigarrillos fumar o qué religión seguir. Simplemente depurarán esa diatriba y seguirán haciendo lo que quieran. ;-)
El código no es poesía. Code es una variación de la canción de Sinatra "My Way" ...
fuente