• Like
Upcoming SlideShare
Loading in...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.



  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads


Total Views
On SlideShare
From Embeds
Number of Embeds



Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

    No notes for slide


  • 1. Metaprogramación en PHP Hernán Wilkinson @HernanWilkinson
  • 2. Quién soy? Fundador de 10Pines Fundador de FAST (Fundación Argentina de Smalltalk) Profesor de POO, DAO e IngSof2 en FCEyN de la UBA Amante del Desarrollo de Software y su Diseño…
  • 3. Historia  “The biggest hit for me while at SAIL in late '69 was to really understand LISP. Of course, every student knew about car, cdr, and cons, but … no one had penetrated the mysteries of eval and apply. I could hardly believe how beautiful and wonderful the idea of LISP was [McCarthy 1960]” – Alan Kay  “… there were deep flaws in its logical foundations. By this, I mean that the pure language was supposed to be based on functions, but its most important components--such as lambda expressions, quotes, and conds--were not functions at all, and instead were called special forms” – Alan Kay
  • 4. Historia  “The actual beauty of LISP came more from the promise of its metastructures than its actual model. I spent a fair amount of time thinking about how objects could be characterized as universal computers without having to have any exceptions in the central metaphor. What seemed to be needed was complete control over what was passed in a message send; in particular, when and in what environment did expressions get evaluated?” – Alan Kay
  • 5. Metaprogramación y Reflexión Meta-xxx: Que habla sobre, que define a, xxx Ejemplo: Una clase es un Meta-objeto porque define su comportamiento El español es un “meta-lenguaje” porque puede predicar sobre “si mismo”. Ejemplo: “La palabra casa tiene 4 letras”
  • 6. Metaprogramación y Reflexión Sistema Computacional: Sistema que actúa y razona sobre un dominio Causal connection: Propiedad que asegura que cambios en el dominio se ven reflejados en el modelo y viceversa Meta-sistema Sistema cuyo dominio es otro sistema Sistema Reflexivo: Meta-sistema “causally connected” consigo mismo
  • 7. Metaprogramación y Reflexión
  • 8. Metaprogramación y Reflexión Reflexión: Habilidad integral de una entidad para representar, operar sobre y tratar consigo mismo en la misma manera que representa, opera sobre y trata con su sujeto primario
  • 9. Metaprogramación y Reflexión Introspection: La habilidad de un programa de razonar acerca de si mismo y/o la implementación del lenguaje de programación (read)
  • 10. Metaprogramación y Reflexión Intercession: La habilidad de un programa de “actuar” sobre la reificaciones de si mismo y la implementación del lenguaje de programación (write)
  • 11. Metaprogramación y Reflexión Reflexión Estructural: La habilidad de un programa de acceder a su representación estructural y la implementación del lenguaje de programación
  • 12. Metaprogramación y Reflexión Reflexión de Comportamiento Habilidad de un programa de acceder a la representación dinámica de si mismo, esto es a la ejecución operacional del programa
  • 13. Metaprogramación y Reflexión Lenguajes meta-circulares
  • 14. Ejemplos Read Write Structure Reflection classes Reglas de Programación Etc eval Muy limitado en PHP Behavior No posible en PHP eval __call Pluggable Proxy Etc
  • 15. Ejemplos Suficiente PPT Programming!
  • 16. Ejemplos Programming Rules (para todos y todas!) https://github.com/hernanwilkinson/php_metaprogramming_examples.git
  • 17. Ejemplos Visitor https://github.com/hernanwilkinson/php_metaprogramming_examples.git
  • 18. Ejemplos Lazy Initialization Proxy https://github.com/hernanwilkinson/php_metaprogramming_examples.git
  • 19. Ejemplos Observer with ActiveVariable https://github.com/hernanwilkinson/php_metaprogramming_examples.git
  • 20. Qué le falta thisContext addMethod/removeMethod … compile (se puede hacer algo con eval) changeClass become
  • 21. Enseñamos estos y otros temas como: • Webinar Gratuitos: http://www.10pines.com/training/webinars • Diseño Avanzado con Objetos I y II • Metaprog. en Lenguages de Objetos • TDD, TDD Avanzado … y más http://www.10pines.com/training
  • 22. Preguntas?