Zend Code in ZF 2.0
Upcoming SlideShare
Loading in...5
×
 

Zend Code in ZF 2.0

on

  • 3,965 views

This is a low-level, and philosophical discussion on the act of compiling data out of your PHP applications using Zend\Code: Scanning, Generating, Annotating code in PHP.

This is a low-level, and philosophical discussion on the act of compiling data out of your PHP applications using Zend\Code: Scanning, Generating, Annotating code in PHP.

Statistics

Views

Total Views
3,965
Views on SlideShare
3,945
Embed Views
20

Actions

Likes
0
Downloads
27
Comments
0

3 Embeds 20

http://svetus.webs.com 18
http://b.hatena.ne.jp 1
http://bitly.com 1

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Zend Code in ZF 2.0 Zend Code in ZF 2.0 Presentation Transcript

  • October 2011Skynet in ZF 2.0Or, 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 years2
  • Why Skynet? •From wikipedia: “ ... an artificially intelligent system which became self-aware and revolted against its creators.” “The strategy behind Skynets 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 code5
  • 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 work6
  • Why Skynet? •What does Skynet not look like? Simple Easy to understand Finite inputs / outputs Easy to get up and running with7
  • 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 optimizer8
  • 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 can9
  • 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, code10
  • 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 functionality13
  • 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 structures14
  • Problem 115
  • 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 memory16
  • 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 this18
  • Static vs. Dynamic •Runtime Static - Fast Dynamic - Slow •Dev-time Static - slower workflow Dynamic - workflow resembles runtime19
  • Static vs. Dynamic •Typical PHP workflow for dynamic applications: initiate request fulfill request return to consumer20
  • 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 consumer21
  • 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 consumer22
  • 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 initialization23
  • 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 support24
  • So, What Is Our Toolset? •ZendCode ZendCodeReflection ZendCodeGenerator ZendCodeScanner ZendCodeAnnotation25
  • ZendCodeReflection •Originally part of ZF1 •Added features: file reflection docblock reflection26
  • ZendCodeReflection27
  • ZendCodeReflection cont’28
  • ZendCodeGenerator •Originally ZF 1’s ZendCodeGenerator •Built OO Classes with an OO API Mainly consumed by Zend_Tool29
  • ZendCode Generator30
  • 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 docblock31
  • ZendCodeScanner Class Hierarchy32
  • 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 course34
  • 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 slow35
  • ZendCodeAnnotation •Single Interface to implement: ZendCodeAnnotationAnnotation36
  • ZendCodeAnnotationManager •Simple Manager to Populate:37
  • Demo 1: ZendCodeScanner •Find all dependencies in a directory full of code •Demo38
  • 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 •Demo39
  • 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