"Building Modern PHP Applications" - Jackson Murtha, South Dakota Code Camp 2012

10,296 views

Published on

"Building Modern PHP Applications" by Jackson Murtha, given November 10, 2012, at South Dakota Code Camp 2012 in Sioux Falls.

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
10,296
On SlideShare
0
From Embeds
0
Number of Embeds
31
Actions
Shares
0
Downloads
24
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

"Building Modern PHP Applications" - Jackson Murtha, South Dakota Code Camp 2012

  1. 1. Building Modern PHP ApplicationsHow PHP language, tool, and frameworkadvancements will help you improve your applications.
  2. 2. Me● Developer at Blend Interactive (blendinteractive.com)● Sioux Falls, SD● Contact Me: – shellrunner.com – @jacksonmurtha – github.com/jxn – gplus.to/jacksonmurtha – jackson@jacksonmurtha.com
  3. 3. Attendee Survey● Are you developing applications in PHP? – Which version? Which Platform(s)? – Are you using a framework?● What other languages are you using?● Are you testing your PHP applications? – Unit testing? Browser integration testing?
  4. 4. PHPs Image Problem● Language origins● Deprecated features● Disorganized/disparate community● Poor release-planning● Persistent myths● Bad code (in high-profile applications)● New features are not well known● Some legitimate concerns (threads, enforced security policies, naming / param consistency)
  5. 5. PHP Myths● OOP is difficult or impossible ● Not a “real” programming language – a preprocessor● Performance problems ● Insecure● Windows is a second-class citizen ● All “blog code”● Community in decline ● Immature platform or only immature● Difficult/Impossible to separate applications responsibilities (view-code littered with business logic) ● Poor garbage collection● Not testable ● Tools are outdated● Tools are focused on the document-web ● Everything is global ● Fate of the language is tied to the fate of● No longer needed given client-side state mod_php● Dumb PHP “features” get in the way ● No modern language features● New deployment methods are not ● Not enterprise-friendly available (e.g. Heroku) ● Difficult to add contributions● Poorly-managed releases, slow release cycle ● No visibility of roadmap
  6. 6. Valid Criticisms● Naming / parameter consistency*● Multi-byte strings can cause problems*● Threading*● Few “forced” conventions*● PHP is rarely “first to feature”*● ???
  7. 7. Changes to the web● Javascript is now viable / sexy ● emergence of “big data”● ajax is ubiquitous ● multi-server environments● rising application complexity ● viability of non-shared hosting● client / browser enhancements ● rise of the web application and decline● ascendancy of the web API of the document web● new code lifespan requirements ● popularization of rails/django● popularity of agile development ● viability of compiled languages (C# /● automated application testing Java)● event-driven designs ● growth of the mobile web● virtualized environment advancements ● alternatives to database for storage● return of the generated static page ● commercialization of● new expectations and legal compliance software/developer tools and training● web development buzz and hype
  8. 8. PHP is constantly evolving● Release / cultural changes● Feature removal● New PHP features● New PHP tools● Second generation frameworks● New external tools
  9. 9. Release / core development changes● New developers on the core team● New RFC process● Reworked community resources● Feature-release timetable, ~1 year● Bugfix / maintenance timetable● Bug reporting improvements, reworked documentation approval process● Clearer expectations, more development visibility, smoother release transitions, greater predictability● Larger, more diverse developer community and a more experienced security team● Inter-framework cooperation & standards organizations
  10. 10. Framework Interop● http://php-fig.org● Growing influence, with three standards● PSR-0 – Autoloading/namespacing● PSR-1 – Basic coding standard● PSR-2 – Thorough style-guide● More coming....
  11. 11. Feature removal● Removal of some of the features caused the worst code offenses and security / predictability problems – Magic Quotes – register_globals – safe_mode – outdated mysql functions
  12. 12. New Features – PHP 5.0 – 5.3● Improved inheritance model● Namespaces● PDO● Closures● Phar● Exceptions● SPL work / extensions improvements● Late static binding● Garbage collector improvements
  13. 13. Namespaces ● Encapsulate Classes, Interfaces, Functions, Constants, Traits ● Provide grouping, prevent collisions, allow aliasing ● Encourage segregation of code ● Replace hackish alternatives ● Compile-time, not runtime
  14. 14. PDO● PHP Data Objects● “data-access” abstraction layer● Provide for object-oriented database access● Encourage prepared statements:
  15. 15. Phar● Single-file PHP archive● Executable package● Can access assets within and outside itself● phar:// stream wrapper available
  16. 16. Closures / Lambda functions● Hijacked from functional languages● More efficient than create_function()● Very useful for sort(), array_map(), array_filter(), or function using a callback parameter.
  17. 17. Garbage Collection / Late Static Binding /Performance and memory enhancements● Efficiency gains● Dont try to outsmart the compiler
  18. 18. New Features – 5.4● upload progress ● $this in closures● binary notation ● callable typehint● array short syntax ● jsonSerializable● array dereferencing interface● class member access ● short echo tag always on instantiation available● indirect method call by ● built-in webserver array var ● traits
  19. 19. Array Dereferencing
  20. 20. Built-in webserver● Easy / no configuration in most environments● Development-only● To start: php -S localhost:8000● Provides many server environment variables● Configuration php.ini, port, docroot can be changed at execution
  21. 21. Traits● Horizontal code-reuse (cf. mixins)● “Compiler-assisted copy and paste”● Obey most class behaviors, but cannot be instantiated
  22. 22. ● Traits can be composed of other traits● Aliasing and collision prevention with as and insteadof● Multiple traits can be used at once
  23. 23. New Features – 5.5● Password API● Setters / Getters● Generators● Intl improvements● array_column()● Fully-qualified class names● Try / Catch / Finally● Parameter skipping● Read-only properties● Named Parameters?
  24. 24. Generators● Simpler method for working with iterators● Nearly identical to the python implementation
  25. 25. Setters / Getters
  26. 26. Password API
  27. 27. New PHP Tools● Package tools – Composer (Pyrus/Pear2, Pear, Pecl, extensions, Pirum)● Testing tools – PHPUnit, Behat, Mink, php-selenium, goutte, phpspec● Static analysis tools – Php_Depend, phpcpd, phpdcd, codecoverage, codesniffer, mess detector, PHP-CS-Fixer
  28. 28. Composer● http://getcomposer.org● Repository management through packagist.org, bitbucket, github, etc.● Solves many issues with PEAR● easy install:● curl -s https://getcomposer.org/installer | php● Package lists, sources, dependencies, updates, installation locations● easy package setup, simple hosting setup, vcs/pear integration, github/bitbucket API tools, satis integration● library autoloading via require vendor/autoload.php;
  29. 29. Composer.json
  30. 30. Second Generation Frameworks● Post-PHP v. 5.3 – Symfony 2+, ZendFramework 2.0, Silex, (Lithium? CakePHP 2+ ?)● More modular than predecessors● Compliant with PHP-FIG (PSR-0)● Use modern PHP extensions, testing tools, OOP, abstraction layers
  31. 31. Symfony 2.0● Installation/dependency resolution: Composer
  32. 32. Component Development● Bundles● Scaffolding● ORM● Components symfony.com/components: – Routing – EventDispatcher – HttpFoundation/HttpKernel – Assetic
  33. 33. Run Symfony● run php ./app/console server:run● or configure webserver manually
  34. 34. Create a bundle: the “hard” way● Create a bundle directory in src/ – e.g. src/MyPackage/MyBundle● Create bundle definition class● Create controller class● Create routes● Create view● Register bundle in AppKernel
  35. 35. Create the bundle definition class● contains namespaces and build functions for the bundle, if necessary
  36. 36. Create a controller class
  37. 37. Create view / Create routes
  38. 38. Register the bundle in AppKernel
  39. 39. Create a bundle: the easy way● Generates: – template skeleton – resource directories – appKernel registry – unit test skeleton – bundle definition class – default controller● multiple routing options
  40. 40. Run the app● Start / visit webserver – app/console server:run● Navigate to your route to see the response – e.g. http://localhost:8000/app_dev.php/yourRoute/yourParameter● How is this better than non-framework PHP?● How is this better than existing (first-generation) frameworks?
  41. 41. The End...● Questions...● Feedback...

×