Mi problema inicial era por decirlo menos, «simple». Cree unas clases para manejar «módulos» (like-joomla), «bloques» (like-phpnuke) , widgets (like-wordpress). Es decir pequeños recuadros de html que puedo poner en una barra lateral, como en este blog.
OK. Mi diseño consistió en:
- Clase Dock: es un «área» donde se pueden encolar los widgets. Ejemplo: un leftSidebar, un menuBar, etc…
- Clase Widget: una clase básica de la cual heredaran los demás widgets. Un Widget entonces será un pequeño espacio que retornará HTML.
- Clases que heredan de Widget. Ejemplo: Widget_Validator, es uno que hice que retorna los botoncitos con los links para validar el html con el validador de la w3c.
Hasta ahí todo OK.
Entonces, surgió la problemática. Algunos de mis Widget_* necesitaban recursos externos (un script de vista, un modelo, una traducción, etc…). Así que pensé «OK, necesito un directorio de recursos para cada widget». El problema está en que en algunas partes del código, tengo las instancias de los widgets, pero no necesariamente conozco su nombre de clase, pues el método $widget->getContent() es el que hace la magia de pegar el HTML en su posición. Entonces pensé «ok, necesito un método que me retorne el nombre del ‘directorio de recursos’, puede ser en base al nombre de la propia clase».
Acá es donde pillé el EPIC FAIL:
Seguir leyendo PHP5 and his curious inheritance handle (OOP) PHP5 y su curiosa la manera de manejar la herencia (POO)