Slide 1

Slide 1 text

foolab.ca | @foolabca Modernize Your PHP Code IPC, Berlin - June 10, 2015

Slide 2

Slide 2 text

Anna Filina • Developer • Problem solver • Teacher • Advisor • FooLab + ConFoo 2

Slide 3

Slide 3 text

Objectives • Simplify code • Improve design • Increase maintainability • Make coding more pleasant 3

Slide 4

Slide 4 text

Namespaces // 5.3 // Avoid name collisions between classes. $my_user = new MyProject\Entity\User(); $lib_user = new SomeLibrary\Entity\User(); // Alias to long names. use Company\Project\Framework\Entity as Entity $user = new Entity\User(); // Try Composer! 4

Slide 5

Slide 5 text

Closures / Anonymous Functions // 5.3 // Assign to a variable $filter_function = function($item) { ... }; 5

Slide 6

Slide 6 text

Closures / Anonymous Functions // Callback functions $products = array( array("name" => "Skyrim", "price" => 30), array("name" => "Destiny", "price" => 50) ); $results = array_filter($products, function($item) { return $item["price"] <= 40; }); 6

Slide 7

Slide 7 text

Traits // 5.4 // Import groups of properties and methods trait TextOverlay { function setText() { ... } function setFontSize() { ... } } trait ImageBackground { function setUrl() { ... } } class FacebookQuote { use TextOverlay; use ImageBackground; } 7

Slide 8

Slide 8 text

Finally // 5.5 // Practical if you want to execute code whether there is or no exception. try { create_temp_file(); write_to_temp_file(); output_temp_file(); } catch(SomeException $e) { echo "Some error"; } finally { delete_temp_file(); } 8

Slide 9

Slide 9 text

Short Array Syntax // 5.4 // Hard to read a complex structure. $products = array( array( "name" => "Skyrim", "price" => 30, "requirements" => array( "os" => array("Win XP", "Win Vista", "Win 7"), "ram" => 2048 ) ), array( "name" => "Diablo 3", "price" => 50, "requirements" => array( "os" => array("Win XP", "Win Vista", "Win 7", "Win 8"), "ram" => 1024 ) ) ); 9

Slide 10

Slide 10 text

Short Array Syntax $products = [ [ "name" => "Skyrim", "price" => 30, "requirements" => [ "os" => [ "Win XP", "Win Vista", "Win 7" ], "ram" => 2048 ] ], [ "name" => "Diablo 3", "price" => 50, "requirements" => [ "os" => ["Win XP", "Win Vista", "Win 7", "Win 8"], "ram" => 1024 ] ] ]; 10

Slide 11

Slide 11 text

Password Functions // 5.5 $pass = password_hash("mypass", PASSWORD_BCRYPT, [ "cost" => 12, "salt" => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM) ]); // Between .25 et .50 seconds if (password_verify($form_password, $db_password)) {...} 11

Slide 12

Slide 12 text

Foreach With List // 5.5 $shape = [ [0, 0], [2, 4], [4, 0] ]; foreach ($shape as list($x, $y)) { line_to_coords($x, $y); } 12

Slide 13

Slide 13 text

Argument Unpacking // 5.6 function addToCart($qty, $name, $price) {...} $product = ["Civilization V", 40]; addToCart(1, ...$product); // addToCart(1, $product[0], $product[1]); 13

Slide 14

Slide 14 text

Anna Filina • Development: PHP, JS, etc. • Fix problems: bugs, performance, etc. • Workshops: testing, Symfony, AngularJS, API, etc. • Advisor: testing strategy, legacy code, etc. 14

Slide 15

Slide 15 text

@afilina afilina.com