SlideShare a Scribd company logo
October 2011




Skynet in ZF 2.0
Or, better put “what one can do with ZendCode”
Who Am I?


    •Ralph Schindler (ralphschindler)
     Software Engineer on the Zend Framework team
      •At Zend for almost 4 years
      •Before that TippingPoint/3Com
    Programming PHP for 13+ years
    Live in New Orleans, LA.
      •Lived in Austin, Tx for 5 years




2
Why Skynet?


    •From wikipedia:

    “ ... an artificially intelligent system which
     became self-aware and revolted against its
     creators.”

    “The strategy behind Skynet's creation was to
     remove the possibility of human error and slow
     reaction time to guarantee fast, efficient response
     to enemy attack.”

3
Why Skynet?

    •So, ... who is the enemy?




4
Why Skynet?


    •Other enemies (without photo’s)
     Unmaintainable applications
     Untestable applications
     Slow applications
     Un-fun / boring code
     Painful code




5
Why Skynet?


    •So, what does Skynet look like?
    •Anything we develop that looks
     too magical
     too-good-to-be-true
     too all-encompassing
     too flexible / too many input types
     requires too much documentation
     is outside our normal understanding of how things
     work


6
Why Skynet?


    •What does Skynet not look like?
     Simple
     Easy to understand
     Finite inputs / outputs
     Easy to get up and running with




7
Why Skynet


    •In a nutshell: PHP
     PHP has no development time compile phase
     On it’s own, it doesn’t know much
     •Hence, the many upon many frameworks
    All decisions are pushed into “request” time
    Single strategy for performance increase
     •caching
     •black-box optimizer




8
Why Skynet?


    •Basically, ZendCode is Skynet (figuratively)
     it can understand your code, sometimes better
     than the developer whom wrote it
     it can expose information about your code that the
     developer was unaware of
     it can generate code faster than you can




9
Why Skynet?


     •Ok, not really
     •ZendCode will not:
      see developers as a threat
      attempt to take over the world
      send the Terminator (a.k.a Matthew Weier
      O’Phinney) after you for writing bad,
      unmaintainable, code




10
Who is the Terminator?




11
What does ZendCode Do?




     •So, what does ZendCode do?




12
Let’s Recap the Humble Beginnings


     •ZF1 users wanted scaffolding & RAD
     •So, ...
      Zend_Tool
       •Zend_Tool_Project / Zend_Tool_Framework
      Zend_CodeGenerator
       •original intention was more than PHP
      Zend_Reflection
       •added docblock parsing functionality



13
ZF1 Problem Area


     •This setup suffered from 2 major problems:
      Runtime dependencies are not always loaded
      Same request changes to structures do not update
      in-memory structures




14
Problem 1




15
Problem 2


     •Workflow (in the same request):
      Require File
      Build ZendCodeGenerator object based off Zend
      Reflection object of a class
       •(For example a controller)
     Add method to class
     Write to disk
     Build ZendCodeGenerator object based off Zend
      Reflection object
       •FAIL! B/c file is already in memory

16
Problem 2 - Temporary Solution


     •Temporary solution was to cache generator
      objects that were built based one particular
      reflection objects, and return those when asked
      for a generator object seeded with a known
      reflection object

     •“We’ll fix this in ZF2”




17
Other Realizations


     •We were not going to get other generator types
     •Generators were closely related to Reflection
      and the new Scanner component
     •ZendCode was a better place for all of this




18
Static vs. Dynamic


     •Runtime
      Static - Fast
      Dynamic - Slow


     •Dev-time
      Static - slower workflow
      Dynamic - workflow resembles runtime




19
Static vs. Dynamic


     •Typical PHP workflow for dynamic applications:



                           initiate request

                            fulfill request

                          return to consumer


20
Static vs. Dynamic


     •Typical PHP workflow for “static” applications
      with compilation built in (dev time):

                           initiate request

      compile (during request, but omitted during production)


                            fulfill request

                          return to consumer
21
Static vs. Dynamic


     •Typical PHP workflow for “static” applications
      with compilation NOT built in (dev time):

                            (change code)
                           (compile code)

                            initiate request
                             fulfill request
                          return to consumer

22
Static vs. Dynamic

     •You’ve probably seen static analysis in some way before:
      Caching
       •If you never intend on expiring the data, it’s not really a cache
      if (!file_exists(..)) { file_put_contents(..., var_export()) }
      Zend Optimizer / APC
      Content Platforms:
       •Drupal
         – development mode
         – non-caching mode
         – module initialization
       •Wordpress
         – installation hooks: plugin initialization




23
What are we compiling?


     •Anything dynamically looked up
      What the valid routes are
      What the valid application assets are
       •classes
       •view scripts
     Where particular classes are located


     More?
       •Which extensions are loaded
       •What the php environment can support
24
So, What Is Our Toolset?


     •ZendCode
      ZendCodeReflection
      ZendCodeGenerator
      ZendCodeScanner
      ZendCodeAnnotation




25
ZendCodeReflection


     •Originally part of ZF1
     •Added features:
      file reflection
      docblock reflection




26
ZendCodeReflection




27
ZendCodeReflection cont’




28
ZendCodeGenerator


     •Originally ZF 1’s ZendCodeGenerator
     •Built OO Classes with an OO API
      Mainly consumed by Zend_Tool




29
ZendCode
     Generator




30
ZendCodeScanner


     •ZendCodeScanner
      Token based “reflection”
      Reflection for files in ZF1 has a similar approach
      Ascertain information in files:
       •what namespaces are inside this file
       •what use statements are inside a particular namespace
       •what classes are in this file’s namespaces
       •what files are required (none, right?)
       •is there a file level docblock


31
ZendCodeScanner Class Hierarchy




32
ZendCode
     Scanner (Sample)




33
ZendCodeAnnotation


     •Annotations
      Why? You asked for it. At least some of you did.
      There’s no native PHP support for it
      Similar to:
       •Java’s Annotation system
       •C#’s Attribute system
       •Doctrine’s Annotation system
       •with a PHP twist of course




34
ZendCodeAnnotation

     •Design:
     Do not force content into a particular DSL
     Build as a simple easy to use framework for easy consumption
     Prototype pattern
     Use ZendCodeScanner
     •Drawbacks
     Slow, very very slow




35
ZendCodeAnnotation

     •Single Interface to implement:
      ZendCodeAnnotationAnnotation




36
ZendCodeAnnotationManager

     •Simple Manager to Populate:




37
Demo 1: ZendCodeScanner

     •Find all dependencies in a directory full of code


     •Demo




38
Demo 2: Built a Micro-framework

     •Goals
     Find on github.com/ralphschindler/middlewarephp
     few classes - the “middleware” is editable
     fast (2ms request for hello world)
     compilation based
       •Routes
       •Classmap autoloader
     annotation based
     utilize include returns, closures, and arrays


     •Demo



39
Philisophical



     •Let’s get philosophical:
      Should we be “compiling” elements?
       •Is this what PHP is all about?
       •Rasmus says yes.
      Can we architect flexible and performant
      applications without some kind of static code
      analysis that affects runtime?
      How do we introduce these tasks into developer
      workflows where they make the most sense, don’t
      impede development?
40
Fin




     •Questions and/or comments, let’s go grab a beer discuss.
     •Remember ZF2 is only beta, if you have opinions on how we
      should go about applying these techniques, get involved NOW!


     •Thank you!




41

More Related Content

What's hot (20)

PDF
PHP Frameworks Review - Mar 19 2015
kyphpug
 
PDF
Go - A Key Language in Enterprise Application Development?
C4Media
 
PPTX
Build software like a bag of marbles, not a castle of LEGO®
Hannes Lowette
 
PDF
PHP Toolkit from Zend and IBM: Open Source on IBM i
Alan Seiden
 
PPTX
Getting started with PHP on IBM i
Zend by Rogue Wave Software
 
PPTX
Zend Products and PHP for IBMi
Shlomo Vanunu
 
KEY
Extending ZF & Extending With ZF
Ralph Schindler
 
PDF
Sunshine php practical-zf1-zf2-migration
Clark Everetts
 
PDF
Ekon20 mORMot Legacy Code Technical Debt Delphi Conference
Arnaud Bouchez
 
PPTX
A Lap Around Visual Studio 11
Chad Green
 
PDF
The Architect Way - JSCamp.asia 2012
Jan Jongboom
 
PPT
Zend
marcosTedsys
 
PDF
Zend con practical-zf1-zf2-migration
Clark Everetts
 
PPTX
PHP on IBM i Tutorial
ZendCon
 
PDF
Organizing Your PHP Projects (2010 ConFoo)
Paul Jones
 
PDF
Developing better PHP projects
Mohammad Emran Hasan
 
PDF
Enterprise PHP
Mohammad Emran Hasan
 
PPT
Zend Framework
John Coggeshall
 
PPTX
Tech io spa_angularjs_20130814_v0.9.5
Ganesh Kondal
 
KEY
Polyglot and functional (Devoxx Nov/2011)
Martijn Verburg
 
PHP Frameworks Review - Mar 19 2015
kyphpug
 
Go - A Key Language in Enterprise Application Development?
C4Media
 
Build software like a bag of marbles, not a castle of LEGO®
Hannes Lowette
 
PHP Toolkit from Zend and IBM: Open Source on IBM i
Alan Seiden
 
Getting started with PHP on IBM i
Zend by Rogue Wave Software
 
Zend Products and PHP for IBMi
Shlomo Vanunu
 
Extending ZF & Extending With ZF
Ralph Schindler
 
Sunshine php practical-zf1-zf2-migration
Clark Everetts
 
Ekon20 mORMot Legacy Code Technical Debt Delphi Conference
Arnaud Bouchez
 
A Lap Around Visual Studio 11
Chad Green
 
The Architect Way - JSCamp.asia 2012
Jan Jongboom
 
Zend con practical-zf1-zf2-migration
Clark Everetts
 
PHP on IBM i Tutorial
ZendCon
 
Organizing Your PHP Projects (2010 ConFoo)
Paul Jones
 
Developing better PHP projects
Mohammad Emran Hasan
 
Enterprise PHP
Mohammad Emran Hasan
 
Zend Framework
John Coggeshall
 
Tech io spa_angularjs_20130814_v0.9.5
Ganesh Kondal
 
Polyglot and functional (Devoxx Nov/2011)
Martijn Verburg
 

Similar to Zend Code in ZF 2.0 (20)

PDF
ZF2 Presentation @PHP Tour 2011 in Lille
Zend by Rogue Wave Software
 
PDF
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf Conference
 
PDF
Zend Framework 2 quick start
Enrico Zimuel
 
PDF
Quick start on Zend Framework 2
Enrico Zimuel
 
PDF
A quick start on Zend Framework 2
Enrico Zimuel
 
PDF
Zend Framework 2, What's new, Confoo 2011
Bachkoutou Toutou
 
PPT
Unit Test for ZF SlideShare Component
Kaiuwe
 
PPT
Unit Test for ZF SlideShare Component
Kaiuwe
 
PPT
Unit Test for ZF SlideShare Component
Kaiuwe
 
PPT
Unit Test for ZF SlideShare Component
Kaiuwe
 
PPT
Unit Test for ZF SlideShare Component
Kaiuwe
 
PPT
Unit Test for ZF SlideShare Component
Kaiuwe
 
PPT
Unit Test for ZF SlideShare Component
Diego Delon
 
PPT
Unit Test for ZF SlideShare Component
Diego Delon
 
PPT
Unit Test for ZF SlideShare Component
Diego Delon
 
PPT
Unit Test for ZF SlideShare Component
Diego Delon
 
PPT
Unit Test for ZF SlideShare Component
Diego Delon
 
PPT
Unit Test for ZF SlideShare Component
Diego Delon
 
PDF
A Tale of Two Toolkits
Zend by Rogue Wave Software
 
PPT
Unit Test for ZF SlideShare Component
Diego Delon
 
ZF2 Presentation @PHP Tour 2011 in Lille
Zend by Rogue Wave Software
 
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf Conference
 
Zend Framework 2 quick start
Enrico Zimuel
 
Quick start on Zend Framework 2
Enrico Zimuel
 
A quick start on Zend Framework 2
Enrico Zimuel
 
Zend Framework 2, What's new, Confoo 2011
Bachkoutou Toutou
 
Unit Test for ZF SlideShare Component
Kaiuwe
 
Unit Test for ZF SlideShare Component
Kaiuwe
 
Unit Test for ZF SlideShare Component
Kaiuwe
 
Unit Test for ZF SlideShare Component
Kaiuwe
 
Unit Test for ZF SlideShare Component
Kaiuwe
 
Unit Test for ZF SlideShare Component
Kaiuwe
 
Unit Test for ZF SlideShare Component
Diego Delon
 
Unit Test for ZF SlideShare Component
Diego Delon
 
Unit Test for ZF SlideShare Component
Diego Delon
 
Unit Test for ZF SlideShare Component
Diego Delon
 
Unit Test for ZF SlideShare Component
Diego Delon
 
Unit Test for ZF SlideShare Component
Diego Delon
 
A Tale of Two Toolkits
Zend by Rogue Wave Software
 
Unit Test for ZF SlideShare Component
Diego Delon
 
Ad

More from Ralph Schindler (11)

KEY
Zend Di in ZF 2.0
Ralph Schindler
 
PDF
Zend Framework 1 + Doctrine 2
Ralph Schindler
 
PDF
484 Days of PHP 5.3
Ralph Schindler
 
PDF
Modeling best practices
Ralph Schindler
 
PPT
What's New in ZF 1.10
Ralph Schindler
 
KEY
Extending Zend_Tool
Ralph Schindler
 
PDF
Zend_Tool In ZF 1.8 Webinar
Ralph Schindler
 
PPT
Zend Framework 1.8 Features Webinar
Ralph Schindler
 
PDF
Software Engineering In PHP
Ralph Schindler
 
PPT
Zend_Layout & Zend_View Enhancements
Ralph Schindler
 
PPT
Zend_Tool: Rapid Application Development with Zend Framework
Ralph Schindler
 
Zend Di in ZF 2.0
Ralph Schindler
 
Zend Framework 1 + Doctrine 2
Ralph Schindler
 
484 Days of PHP 5.3
Ralph Schindler
 
Modeling best practices
Ralph Schindler
 
What's New in ZF 1.10
Ralph Schindler
 
Extending Zend_Tool
Ralph Schindler
 
Zend_Tool In ZF 1.8 Webinar
Ralph Schindler
 
Zend Framework 1.8 Features Webinar
Ralph Schindler
 
Software Engineering In PHP
Ralph Schindler
 
Zend_Layout & Zend_View Enhancements
Ralph Schindler
 
Zend_Tool: Rapid Application Development with Zend Framework
Ralph Schindler
 
Ad

Recently uploaded (20)

PPTX
Enabling the Digital Artisan – keynote at ICOCI 2025
Alan Dix
 
PDF
Kubernetes - Architecture & Components.pdf
geethak285
 
PDF
How to Comply With Saudi Arabia’s National Cybersecurity Regulations.pdf
Bluechip Advanced Technologies
 
PDF
Simplify Your FME Flow Setup: Fault-Tolerant Deployment Made Easy with Packer...
Safe Software
 
PPTX
Smart Factory Monitoring IIoT in Machine and Production Operations.pptx
Rejig Digital
 
PPTX
Smarter Governance with AI: What Every Board Needs to Know
OnBoard
 
PPTX
MARTSIA: A Tool for Confidential Data Exchange via Public Blockchain - Poster...
Michele Kryston
 
PDF
Bitkom eIDAS Summit | European Business Wallet: Use Cases, Macroeconomics, an...
Carsten Stoecker
 
PPTX
Mastering Authorization: Integrating Authentication and Authorization Data in...
Hitachi, Ltd. OSS Solution Center.
 
PPTX
Reimaginando la Ciberdefensa: De Copilots a Redes de Agentes
Cristian Garcia G.
 
PDF
Understanding The True Cost of DynamoDB Webinar
ScyllaDB
 
PPTX
Practical Applications of AI in Local Government
OnBoard
 
PDF
“Scaling i.MX Applications Processors’ Native Edge AI with Discrete AI Accele...
Edge AI and Vision Alliance
 
PDF
DoS Attack vs DDoS Attack_ The Silent Wars of the Internet.pdf
CyberPro Magazine
 
PDF
FME as an Orchestration Tool with Principles From Data Gravity
Safe Software
 
PDF
Quantum Threats Are Closer Than You Think – Act Now to Stay Secure
WSO2
 
PDF
How to Visualize the ​Spatio-Temporal Data Using CesiumJS​
SANGHEE SHIN
 
PDF
ICONIQ State of AI Report 2025 - The Builder's Playbook
Razin Mustafiz
 
PPTX
Paycifi - Programmable Trust_Breakfast_PPTXT
FinTech Belgium
 
PDF
Enhancing Environmental Monitoring with Real-Time Data Integration: Leveragin...
Safe Software
 
Enabling the Digital Artisan – keynote at ICOCI 2025
Alan Dix
 
Kubernetes - Architecture & Components.pdf
geethak285
 
How to Comply With Saudi Arabia’s National Cybersecurity Regulations.pdf
Bluechip Advanced Technologies
 
Simplify Your FME Flow Setup: Fault-Tolerant Deployment Made Easy with Packer...
Safe Software
 
Smart Factory Monitoring IIoT in Machine and Production Operations.pptx
Rejig Digital
 
Smarter Governance with AI: What Every Board Needs to Know
OnBoard
 
MARTSIA: A Tool for Confidential Data Exchange via Public Blockchain - Poster...
Michele Kryston
 
Bitkom eIDAS Summit | European Business Wallet: Use Cases, Macroeconomics, an...
Carsten Stoecker
 
Mastering Authorization: Integrating Authentication and Authorization Data in...
Hitachi, Ltd. OSS Solution Center.
 
Reimaginando la Ciberdefensa: De Copilots a Redes de Agentes
Cristian Garcia G.
 
Understanding The True Cost of DynamoDB Webinar
ScyllaDB
 
Practical Applications of AI in Local Government
OnBoard
 
“Scaling i.MX Applications Processors’ Native Edge AI with Discrete AI Accele...
Edge AI and Vision Alliance
 
DoS Attack vs DDoS Attack_ The Silent Wars of the Internet.pdf
CyberPro Magazine
 
FME as an Orchestration Tool with Principles From Data Gravity
Safe Software
 
Quantum Threats Are Closer Than You Think – Act Now to Stay Secure
WSO2
 
How to Visualize the ​Spatio-Temporal Data Using CesiumJS​
SANGHEE SHIN
 
ICONIQ State of AI Report 2025 - The Builder's Playbook
Razin Mustafiz
 
Paycifi - Programmable Trust_Breakfast_PPTXT
FinTech Belgium
 
Enhancing Environmental Monitoring with Real-Time Data Integration: Leveragin...
Safe Software
 

Zend Code in ZF 2.0

  • 1. October 2011 Skynet in ZF 2.0 Or, better put “what one can do with ZendCode”
  • 2. Who Am I? •Ralph Schindler (ralphschindler) Software Engineer on the Zend Framework team •At Zend for almost 4 years •Before that TippingPoint/3Com Programming PHP for 13+ years Live in New Orleans, LA. •Lived in Austin, Tx for 5 years 2
  • 3. Why Skynet? •From wikipedia: “ ... an artificially intelligent system which became self-aware and revolted against its creators.” “The strategy behind Skynet's creation was to remove the possibility of human error and slow reaction time to guarantee fast, efficient response to enemy attack.” 3
  • 4. Why Skynet? •So, ... who is the enemy? 4
  • 5. Why Skynet? •Other enemies (without photo’s) Unmaintainable applications Untestable applications Slow applications Un-fun / boring code Painful code 5
  • 6. Why Skynet? •So, what does Skynet look like? •Anything we develop that looks too magical too-good-to-be-true too all-encompassing too flexible / too many input types requires too much documentation is outside our normal understanding of how things work 6
  • 7. Why Skynet? •What does Skynet not look like? Simple Easy to understand Finite inputs / outputs Easy to get up and running with 7
  • 8. Why Skynet •In a nutshell: PHP PHP has no development time compile phase On it’s own, it doesn’t know much •Hence, the many upon many frameworks All decisions are pushed into “request” time Single strategy for performance increase •caching •black-box optimizer 8
  • 9. Why Skynet? •Basically, ZendCode is Skynet (figuratively) it can understand your code, sometimes better than the developer whom wrote it it can expose information about your code that the developer was unaware of it can generate code faster than you can 9
  • 10. Why Skynet? •Ok, not really •ZendCode will not: see developers as a threat attempt to take over the world send the Terminator (a.k.a Matthew Weier O’Phinney) after you for writing bad, unmaintainable, code 10
  • 11. Who is the Terminator? 11
  • 12. What does ZendCode Do? •So, what does ZendCode do? 12
  • 13. Let’s Recap the Humble Beginnings •ZF1 users wanted scaffolding & RAD •So, ... Zend_Tool •Zend_Tool_Project / Zend_Tool_Framework Zend_CodeGenerator •original intention was more than PHP Zend_Reflection •added docblock parsing functionality 13
  • 14. ZF1 Problem Area •This setup suffered from 2 major problems: Runtime dependencies are not always loaded Same request changes to structures do not update in-memory structures 14
  • 16. Problem 2 •Workflow (in the same request): Require File Build ZendCodeGenerator object based off Zend Reflection object of a class •(For example a controller) Add method to class Write to disk Build ZendCodeGenerator object based off Zend Reflection object •FAIL! B/c file is already in memory 16
  • 17. Problem 2 - Temporary Solution •Temporary solution was to cache generator objects that were built based one particular reflection objects, and return those when asked for a generator object seeded with a known reflection object •“We’ll fix this in ZF2” 17
  • 18. Other Realizations •We were not going to get other generator types •Generators were closely related to Reflection and the new Scanner component •ZendCode was a better place for all of this 18
  • 19. Static vs. Dynamic •Runtime Static - Fast Dynamic - Slow •Dev-time Static - slower workflow Dynamic - workflow resembles runtime 19
  • 20. Static vs. Dynamic •Typical PHP workflow for dynamic applications: initiate request fulfill request return to consumer 20
  • 21. Static vs. Dynamic •Typical PHP workflow for “static” applications with compilation built in (dev time): initiate request compile (during request, but omitted during production) fulfill request return to consumer 21
  • 22. Static vs. Dynamic •Typical PHP workflow for “static” applications with compilation NOT built in (dev time): (change code) (compile code) initiate request fulfill request return to consumer 22
  • 23. Static vs. Dynamic •You’ve probably seen static analysis in some way before: Caching •If you never intend on expiring the data, it’s not really a cache if (!file_exists(..)) { file_put_contents(..., var_export()) } Zend Optimizer / APC Content Platforms: •Drupal – development mode – non-caching mode – module initialization •Wordpress – installation hooks: plugin initialization 23
  • 24. What are we compiling? •Anything dynamically looked up What the valid routes are What the valid application assets are •classes •view scripts Where particular classes are located More? •Which extensions are loaded •What the php environment can support 24
  • 25. So, What Is Our Toolset? •ZendCode ZendCodeReflection ZendCodeGenerator ZendCodeScanner ZendCodeAnnotation 25
  • 26. ZendCodeReflection •Originally part of ZF1 •Added features: file reflection docblock reflection 26
  • 29. ZendCodeGenerator •Originally ZF 1’s ZendCodeGenerator •Built OO Classes with an OO API Mainly consumed by Zend_Tool 29
  • 30. ZendCode Generator 30
  • 31. ZendCodeScanner •ZendCodeScanner Token based “reflection” Reflection for files in ZF1 has a similar approach Ascertain information in files: •what namespaces are inside this file •what use statements are inside a particular namespace •what classes are in this file’s namespaces •what files are required (none, right?) •is there a file level docblock 31
  • 33. ZendCode Scanner (Sample) 33
  • 34. ZendCodeAnnotation •Annotations Why? You asked for it. At least some of you did. There’s no native PHP support for it Similar to: •Java’s Annotation system •C#’s Attribute system •Doctrine’s Annotation system •with a PHP twist of course 34
  • 35. ZendCodeAnnotation •Design: Do not force content into a particular DSL Build as a simple easy to use framework for easy consumption Prototype pattern Use ZendCodeScanner •Drawbacks Slow, very very slow 35
  • 36. ZendCodeAnnotation •Single Interface to implement: ZendCodeAnnotationAnnotation 36
  • 37. ZendCodeAnnotationManager •Simple Manager to Populate: 37
  • 38. Demo 1: ZendCodeScanner •Find all dependencies in a directory full of code •Demo 38
  • 39. Demo 2: Built a Micro-framework •Goals Find on github.com/ralphschindler/middlewarephp few classes - the “middleware” is editable fast (2ms request for hello world) compilation based •Routes •Classmap autoloader annotation based utilize include returns, closures, and arrays •Demo 39
  • 40. Philisophical •Let’s get philosophical: Should we be “compiling” elements? •Is this what PHP is all about? •Rasmus says yes. Can we architect flexible and performant applications without some kind of static code analysis that affects runtime? How do we introduce these tasks into developer workflows where they make the most sense, don’t impede development? 40
  • 41. Fin •Questions and/or comments, let’s go grab a beer discuss. •Remember ZF2 is only beta, if you have opinions on how we should go about applying these techniques, get involved NOW! •Thank you! 41

Editor's Notes