SlideShare a Scribd company logo
1 of 11
Seattle PHP User’s Group
September 12, 2013 – LightningTalk
Joel Simpson
 15+ yrs professional software engineering
and consulting experience (~6 yrs with PHP)
 Founder, CEO of Alegion®
 Enterprise Crowdsourcing as a Service
 Lover of Open Source Software (and PHPStorm)
 ..and far too many interests than would fit readably on this slide:
Alegion, sailing, go/weiqi/igo/baduk, micro-controllers and electronics, shakuhachi, settlers of catan
style board games, 3d modeling/rendering/printing, science, technology, start-ups, philosophy, process
engineering, soccer, mountain biking, snow boarding, hiking, obstacle course racing (Spartan), Zen.
 It’s Meta
 PHP 4, the early predecessors, built in methods:
 method_exists()
 class_exists()
 is_a()
 is_subclass_of()
 get_parent_class()
 class_exists — Checks if the class has been defined
 get_called_class — the "Late Static Binding" class name
 get_class_methods — Gets the class methods' names
 get_class_vars — Get the default properties of the class
 get_class — Returns the name of the class of an object
 get_declared_classes — Returns an array with the name of the defined classes
 get_declared_interfaces — Returns an array of all declared interfaces
 get_declared_traits — Returns an array of all declared traits
 get_object_vars — Gets the properties of the given object
 get_parent_class — Retrieves the parent class name for object or class
 interface_exists — Checks if the interface has been defined
 is_a — Checks if the object is of this class or has this class as one of its parents
 is_subclass_of — Checks if the object has this class as one of its parents
 method_exists — Checks if the class method exists
 property_exists — Checks if the object or class has a property
 trait_exists — Checks if the trait exists
Source: http://www.php.net/manual/en/ref.classobj.php
 The ReflectionAPI
 http://php.net/manual/en/book.reflection.php
 BIG, comprehensive, but not complex
 Dev-time
 Generating Documentation
 Auto-complete in IDEs
 Run-time
 Request Routing
 ORM/DBAL
 Design Patterns
 Aspect Oriented Programming
 PHP (“duck” typing – no strict types)
http://hyperboleandahalf.blogspot.com
 A function that populates properties automatically for
quickly smoke testing/debugging field mapping in a
class.
 Our example, a User:
 FirstName
 LastName
 UserName
 EmailAddress
 Password
 Annotation Driven Development (ADD)
 Describe/configure right along side the code
 Advanced ExampleChallenge
 Write a rudimentary “frontController” in 100 lines
of code or less
 Implement request routing via annotations
▪ @url /my/route/
 class Router{private static $a=array();static function
route($b){if(count(self::$a)==0){self::loadRoutableClasses();}foreach(self:
:$a as $c){$d=new ReflectionClass($c);foreach($d->getMethods()as
$e){$f=$e->getDocComment();preg_match_all('/@urls+[
t]*/?(S*)/s',$f,$g,PREG_SET_ORDER);if(!$g){continue;}foreach($g[0]as
$h){if(self::cleanUrl($b)==self::cleanUrl($h)){$i=$d-
>newInstance();$j=$e->getShortName();return $i->$j();}}}}return(new
DefaultController())->notFoundAction();}private static function
cleanUrl($b){return strtolower(trim($b,"/"));}private static function
loadRoutableClasses(){foreach(get_declared_classes()as
$c){if(is_subclass_of($c,'Routable')){self::$a[]=$c;}}}}
 Or ~70 lines of readable, commented code. Let’s take a look….
Me
Joel.Simpson@gmail.com | skype: joelrsimpson |
Linkedin.com/in/joelsimpson | http://alegion.com
Presentation
Content
Slides:https://Speakerdeck.com/JoelSimpson
Code: http://bit.ly/1b7Oo5o
Additional
Information
http://php.net/manual/en/book.reflection.php
C:|$ php –r? <name>
Source: http://www.php.net/manual/en/features.commandline.options.php
--rf <name>
• Show
information
about
function
--rc <name>
• Show
information
about class
--re <name>
• Show
information
about
extension
--rz <name>
• Show
information
about Zend
extension
--ri <name>
• Show
configuration
for extension
(“I” ni)

More Related Content

What's hot

Object Oriented Programming with Java
Object Oriented Programming with JavaObject Oriented Programming with Java
Object Oriented Programming with Java
Jussi Pohjolainen
 

What's hot (14)

Packages
PackagesPackages
Packages
 
OOPS Characteristics (With Examples in PHP)
OOPS Characteristics (With Examples in PHP)OOPS Characteristics (With Examples in PHP)
OOPS Characteristics (With Examples in PHP)
 
The smartpath information systems java
The smartpath information systems javaThe smartpath information systems java
The smartpath information systems java
 
Beginners Guide to Object Orientation in PHP
Beginners Guide to Object Orientation in PHPBeginners Guide to Object Orientation in PHP
Beginners Guide to Object Orientation in PHP
 
Learn C# Programming - Classes & Inheritance
Learn C# Programming - Classes & InheritanceLearn C# Programming - Classes & Inheritance
Learn C# Programming - Classes & Inheritance
 
Java Inheritance - sub class constructors - Method overriding
Java Inheritance - sub class constructors - Method overridingJava Inheritance - sub class constructors - Method overriding
Java Inheritance - sub class constructors - Method overriding
 
Java notes
Java notesJava notes
Java notes
 
OOPs Concepts - Android Programming
OOPs Concepts - Android ProgrammingOOPs Concepts - Android Programming
OOPs Concepts - Android Programming
 
Type theory in practice
Type theory in practiceType theory in practice
Type theory in practice
 
Object Oriented Programming with Java
Object Oriented Programming with JavaObject Oriented Programming with Java
Object Oriented Programming with Java
 
Inheritance and Polymorphism
Inheritance and PolymorphismInheritance and Polymorphism
Inheritance and Polymorphism
 
java tutorial for beginner - Free Download
java tutorial for beginner - Free Downloadjava tutorial for beginner - Free Download
java tutorial for beginner - Free Download
 
Concepts of core java
Concepts of core javaConcepts of core java
Concepts of core java
 
Java basics
Java basicsJava basics
Java basics
 

Similar to Php meetup 20130912 reflection

Framework prototype
Framework prototypeFramework prototype
Framework prototype
DevMix
 
Shuvrojit Majumder . 25900120006 Object Oriented Programming (PCC-CS 503) ...
Shuvrojit Majumder .  25900120006  Object Oriented Programming (PCC-CS 503)  ...Shuvrojit Majumder .  25900120006  Object Oriented Programming (PCC-CS 503)  ...
Shuvrojit Majumder . 25900120006 Object Oriented Programming (PCC-CS 503) ...
ShuvrojitMajumder
 

Similar to Php meetup 20130912 reflection (20)

Framework prototype
Framework prototypeFramework prototype
Framework prototype
 
Framework prototype
Framework prototypeFramework prototype
Framework prototype
 
Framework prototype
Framework prototypeFramework prototype
Framework prototype
 
OOP in PHP
OOP in PHPOOP in PHP
OOP in PHP
 
Class 7 - PHP Object Oriented Programming
Class 7 - PHP Object Oriented ProgrammingClass 7 - PHP Object Oriented Programming
Class 7 - PHP Object Oriented Programming
 
Php oop presentation
Php   oop presentationPhp   oop presentation
Php oop presentation
 
Patterns in Python
Patterns in PythonPatterns in Python
Patterns in Python
 
Lecture-10_PHP-OOP.pptx
Lecture-10_PHP-OOP.pptxLecture-10_PHP-OOP.pptx
Lecture-10_PHP-OOP.pptx
 
Reflection-In-PHP
Reflection-In-PHPReflection-In-PHP
Reflection-In-PHP
 
java traning report_Summer.docx
java traning report_Summer.docxjava traning report_Summer.docx
java traning report_Summer.docx
 
Shuvrojit Majumder . 25900120006 Object Oriented Programming (PCC-CS 503) ...
Shuvrojit Majumder .  25900120006  Object Oriented Programming (PCC-CS 503)  ...Shuvrojit Majumder .  25900120006  Object Oriented Programming (PCC-CS 503)  ...
Shuvrojit Majumder . 25900120006 Object Oriented Programming (PCC-CS 503) ...
 
Oops concepts in php
Oops concepts in phpOops concepts in php
Oops concepts in php
 
Dependency Injection for PHP
Dependency Injection for PHPDependency Injection for PHP
Dependency Injection for PHP
 
Object Oriented Programming
Object Oriented ProgrammingObject Oriented Programming
Object Oriented Programming
 
Php oop (1)
Php oop (1)Php oop (1)
Php oop (1)
 
Lecture 12
Lecture 12Lecture 12
Lecture 12
 
Take the Plunge with OOP from #pnwphp
Take the Plunge with OOP from #pnwphpTake the Plunge with OOP from #pnwphp
Take the Plunge with OOP from #pnwphp
 
Java ppt
Java pptJava ppt
Java ppt
 
OOP Day 2
OOP Day 2OOP Day 2
OOP Day 2
 
Creativity vs Best Practices
Creativity vs Best PracticesCreativity vs Best Practices
Creativity vs Best Practices
 

Recently uploaded

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Recently uploaded (20)

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 

Php meetup 20130912 reflection

  • 1. Seattle PHP User’s Group September 12, 2013 – LightningTalk Joel Simpson
  • 2.  15+ yrs professional software engineering and consulting experience (~6 yrs with PHP)  Founder, CEO of Alegion®  Enterprise Crowdsourcing as a Service  Lover of Open Source Software (and PHPStorm)  ..and far too many interests than would fit readably on this slide: Alegion, sailing, go/weiqi/igo/baduk, micro-controllers and electronics, shakuhachi, settlers of catan style board games, 3d modeling/rendering/printing, science, technology, start-ups, philosophy, process engineering, soccer, mountain biking, snow boarding, hiking, obstacle course racing (Spartan), Zen.
  • 3.  It’s Meta  PHP 4, the early predecessors, built in methods:  method_exists()  class_exists()  is_a()  is_subclass_of()  get_parent_class()
  • 4.  class_exists — Checks if the class has been defined  get_called_class — the "Late Static Binding" class name  get_class_methods — Gets the class methods' names  get_class_vars — Get the default properties of the class  get_class — Returns the name of the class of an object  get_declared_classes — Returns an array with the name of the defined classes  get_declared_interfaces — Returns an array of all declared interfaces  get_declared_traits — Returns an array of all declared traits  get_object_vars — Gets the properties of the given object  get_parent_class — Retrieves the parent class name for object or class  interface_exists — Checks if the interface has been defined  is_a — Checks if the object is of this class or has this class as one of its parents  is_subclass_of — Checks if the object has this class as one of its parents  method_exists — Checks if the class method exists  property_exists — Checks if the object or class has a property  trait_exists — Checks if the trait exists Source: http://www.php.net/manual/en/ref.classobj.php
  • 5.  The ReflectionAPI  http://php.net/manual/en/book.reflection.php  BIG, comprehensive, but not complex
  • 6.  Dev-time  Generating Documentation  Auto-complete in IDEs  Run-time  Request Routing  ORM/DBAL  Design Patterns  Aspect Oriented Programming  PHP (“duck” typing – no strict types) http://hyperboleandahalf.blogspot.com
  • 7.  A function that populates properties automatically for quickly smoke testing/debugging field mapping in a class.  Our example, a User:  FirstName  LastName  UserName  EmailAddress  Password
  • 8.  Annotation Driven Development (ADD)  Describe/configure right along side the code  Advanced ExampleChallenge  Write a rudimentary “frontController” in 100 lines of code or less  Implement request routing via annotations ▪ @url /my/route/
  • 9.  class Router{private static $a=array();static function route($b){if(count(self::$a)==0){self::loadRoutableClasses();}foreach(self: :$a as $c){$d=new ReflectionClass($c);foreach($d->getMethods()as $e){$f=$e->getDocComment();preg_match_all('/@urls+[ t]*/?(S*)/s',$f,$g,PREG_SET_ORDER);if(!$g){continue;}foreach($g[0]as $h){if(self::cleanUrl($b)==self::cleanUrl($h)){$i=$d- >newInstance();$j=$e->getShortName();return $i->$j();}}}}return(new DefaultController())->notFoundAction();}private static function cleanUrl($b){return strtolower(trim($b,"/"));}private static function loadRoutableClasses(){foreach(get_declared_classes()as $c){if(is_subclass_of($c,'Routable')){self::$a[]=$c;}}}}  Or ~70 lines of readable, commented code. Let’s take a look….
  • 10. Me Joel.Simpson@gmail.com | skype: joelrsimpson | Linkedin.com/in/joelsimpson | http://alegion.com Presentation Content Slides:https://Speakerdeck.com/JoelSimpson Code: http://bit.ly/1b7Oo5o Additional Information http://php.net/manual/en/book.reflection.php
  • 11. C:|$ php –r? <name> Source: http://www.php.net/manual/en/features.commandline.options.php --rf <name> • Show information about function --rc <name> • Show information about class --re <name> • Show information about extension --rz <name> • Show information about Zend extension --ri <name> • Show configuration for extension (“I” ni)

Editor's Notes

  1. 1m - Introduction2m - What is Reflection?2m - What does PHP have for Reflection? (what does the api look like)10m - A cool use case (a very simple, hopefully useful, example - not sure what this should be yet)3m - Overview a short advanced example (e.g. 50 lines of code that implement a front controller to route by annotations on class methods, &quot;specify the url path in the annotation, the method get&apos;s called&quot;), posted to github for those who are interested to review later2m - Close
  2. Tons of stuff