Slide 1

Slide 1 text

Modern PHP Ben Ramsey

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

My PHP Story

Slide 4

Slide 4 text

Old-school PHP

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

.php3 .php4

Slide 7

Slide 7 text

The Advent of PHP 5

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

• Brand new object model • Standard PHP library, incl. iterators • Type hinting • Exceptions • SimpleXML & DOM • PDO PHP 5 Features

Slide 10

Slide 10 text

• Passed by reference • Class constants • Static methods/properties • Visibility • Abstract classes & interfaces • Magic methods • __autoload() PHP 5 Object Model

Slide 11

Slide 11 text

• Rewrite of date handling code, with improved timezone support. • Significant performance improvements compared to PHP 5.0.X. • PDO extension is now enabled by default. • And more... More changes in 5.1

Slide 12

Slide 12 text

• New memory manager • Input filtering extension added • JSON extension was added • Hooks for tracking file upload progress were introduced • Introduced DateTime and DateTimeZone objects • And more... More still in 5.2

Slide 13

Slide 13 text

• Support for namespaces • Late static binding • Lambda Functions and Closures • Syntax additions: NOWDOC, ternary short cut "?:" and goto, __callStatic() • Optional garbage collection • Optional mysqlnd PHP native driver • And more... Tons more in 5.3

Slide 14

Slide 14 text

• Traits, shortened array syntax • Improved performance and reduced memory consumption • Built-in webserver in CLI mode • Register globals, magic quotes, and safe mode were removed • And more... Keeping up the pace in 5.4

Slide 15

Slide 15 text

• Generators and coroutines • The finally keyword • Simplified password hashing API • Non-scalar Iterator keys in foreach • list() constructs in foreach statements • Zend OPcache extension • And more... And more in 5.5

Slide 16

Slide 16 text

Modern PHP development isn’t as much about changes in the language as it is about changes in how we build software with PHP.

Slide 17

Slide 17 text

The changes in the language support the ability to build software in new ways with new tools.

Slide 18

Slide 18 text

OOP & Design Patterns

Slide 19

Slide 19 text

• Dynamic dispatch • Encapsulation • Polymorphism • Inheritance • Open recursion • Abstraction • Classes, instances, methods... Features of OOP

Slide 20

Slide 20 text

• Singleton • Factory • Decorator • Iterator • Adapter • Front Controller Design Patterns

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

• Mastering Object Oriented PHP by Brandon Savage masteringobjectorientedphp.com • php|architect’s Guide to PHP Design Patterns by Jason Sweat www.phparch.com/books/phparchitects-guide-to-php-design-patterns • Learning PHP Design Patterns by William Sanders www.php5dp.com OOP & Design Pattern Reading

Slide 23

Slide 23 text

Security

Slide 24

Slide 24 text

• Cross-site scripting • SQL injection • Cross-site request forgery • Session hijacking • Session fixation Attacks

Slide 25

Slide 25 text

Filter input

Slide 26

Slide 26 text

Escape output

Slide 27

Slide 27 text

• Introduced in PHP 5.2 • Provides validation and sanitization • Selected functions: • filter_input() • filter_var() • filter_input_array() • filter_var_array() PHP’s Data Filter Extension

Slide 28

Slide 28 text

Frameworks do much of this for us, now. But we need to be diligent and learn and understand the principles.

Slide 29

Slide 29 text

• Essential PHP Security by Chris Shiflett phpsecurity.org • Websec.io • Anthony Ferrara’s blog blog.ircmaxell.com Security Reading

Slide 30

Slide 30 text

Version Control

Slide 31

Slide 31 text

FTP

Slide 32

Slide 32 text

Dreamweaver MX

Slide 33

Slide 33 text

CVS

Slide 34

Slide 34 text

Subversion

Slide 35

Slide 35 text

Git Mercurial Bazaar

Slide 36

Slide 36 text

You have no excuse. Just use GitHub or BitBucket.

Slide 37

Slide 37 text

Autoloading Practices

Slide 38

Slide 38 text

• Prior to PHP 5, we had to include/ require every single class file we wanted to have available • PHP 5 introduced __autoload() • This has significantly changed the way we build applications Autoloading

Slide 39

Slide 39 text

Death of the Page Controller

Slide 40

Slide 40 text

Page Controller - Handle HTTP request - Update model and decide view Model Domain Logic View Generate HTML

Slide 41

Slide 41 text

Web Server (Dispatch) index.php page1.php page2.php page3.php include.php

Slide 42

Slide 42 text

web_root/ ├── classes/ ├── config.php ├── css/ ├── include.php ├── index.php ├── javascript/ └── page1.php

Slide 43

Slide 43 text

Autoloading and design patterns paved the way to better code structure...

Slide 44

Slide 44 text

Frameworks

Slide 45

Slide 45 text

Frameworks have ushered in a new era of constructing software.

Slide 46

Slide 46 text

• Agavi • CakePHP • CodeIgniter • Joomla • Kohana • Laravel • Lithium • Symfony • Zend Framework • and more!

Slide 47

Slide 47 text

Not only have they made building software easier and faster, but they have created new communities, workflows, and toolsets.

Slide 48

Slide 48 text

Framework Interoperability Group

Slide 49

Slide 49 text

PHP-FIG

Slide 50

Slide 50 text

• PSR-0: Autoloading standard • PSR-1: Basic coding standard • PSR-2: Coding style guide • PSR-3: Logger interface

Slide 51

Slide 51 text

Coding Standards

Slide 52

Slide 52 text

Tests

Slide 53

Slide 53 text

• Unit tests • Functional tests • TDD • BDD • Continuous integration • Code coverage New terms in the PHP lexicon

Slide 54

Slide 54 text

• PHPUnit • SimpleTest • Behat • Codeception Testing Frameworks

Slide 55

Slide 55 text

• The Grumpy Programmer's Guide To Building Testable PHP Applications by Chris Hartjes grumpy-testing.com • The Grumpy Programmer’s PHPUnit Cookbook by Chris Hartjes grumpy-phpunit.com Testing Reading

Slide 56

Slide 56 text

Integration and Coupling

Slide 57

Slide 57 text

APIs & Libraries

Slide 58

Slide 58 text

Composer

Slide 59

Slide 59 text

PEAR?

Slide 60

Slide 60 text

PHP is not only PHP

Slide 61

Slide 61 text

• Vagrant • VirtualBox • The cloud (AWS, Rackspace, etc.) • PaaS (EngineYard, PagodaBox, AppFog, etc.) • Web servers (Apache, Nginx, etc.) • Databases (MySQL, MongoDB, etc.) • Queuing (Gearman, RabbitMQ, SQS, etc.)

Slide 62

Slide 62 text

JavaScript & HTML5

Slide 63

Slide 63 text

The Future of PHP

Slide 64

Slide 64 text

PHP needs you.

Slide 65

Slide 65 text

The Future of the PHP Community

Slide 66

Slide 66 text

User groups

Slide 67

Slide 67 text

Community conferences

Slide 68

Slide 68 text

The PHP community needs you.

Slide 69

Slide 69 text

Ben Ramsey benramsey.com @ramsey joind.in/9290 Thank you Check out... PHP: The Right Way - phptherightway.com

Slide 70

Slide 70 text

Modern PHP Copyright © Ben Ramsey. Some rights reserved. This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported. For uses not covered under this license, please contact the author. Ramsey, Ben. “Modern PHP.” PHP 5.5 Web Summit. PHP Architect. Web. 17 Sep. 2013. Conference Presentation.

Slide 71

Slide 71 text

Photo Credits 1. “Work in progress” by Loïc Doubinine, http://www.flickr.com/photos/ztec/9204770134/ 2. “Ben Ramsey” by Sebastian Bergmann, http://www.flickr.com/photos/sebastian_bergmann/286847543 3. “PHPers out to do Amsterdam” by Aaron Wormus, http://www.flickr.com/photos/aaron/200158232 4. “Part of the PHP Core Team” by Arnaud Limbourg, http://www.flickr.com/photos/arnaudlimbourg/5164654691 5. Untitled by Jeremy Kendall, http://www.flickr.com/photos/jeremykendall/9088961213/ 6. “ElePHPants escaping from big giant mug” by Loïc Doubinine, http://www.flickr.com/photos/ztec/9184943239/

Slide 72

Slide 72 text

Photo Credits 7. “Elephpants at the pavilion” by Derick Rethans, http://www.flickr.com/photos/derickrethans/6208407534 8. “Two elePHPant parked” by Loïc Doubinine, http://www.flickr.com/photos/ztec/9187378656/ 9. “Elephpants in a row” by Rob Allen, http://www.flickr.com/photos/akrabat/8128252662 10. Untitled by Eli White, http://www.flickr.com/photos/eliw/8805534617/ 11. “elePHPant” by Anna Filina, http://www.flickr.com/photos/afilina/3308579171 12. “elePHPants walking through the light” by Jakob Westoff, http://www.flickr.com/photos/jakobwesthoff/3213917240

Slide 73

Slide 73 text

Photo Credits 13. Untitled by Terry Chay, http://www.flickr.com/photos/tychay/1382823666 14. “Chris practices being grumpy” by Rob Allen, http://www.flickr.com/photos/akrabat/8421560178 15. “Elephpant alliance” by Michelangelo van Dam, http://www.flickr.com/photos/dragonbe/3411273755 16. “Read a lot” by Martin Hassman, http://www.flickr.com/photos/hassmanm/4754428088 17. “elePHPant” by Drew McLellan, http://www.flickr.com/photos/drewm/3191872515 18. Untitled by Eli White, http://www.flickr.com/photos/eliw/8806095443