Webday ESGI - 11 Juin 2015
Nouveautés PHP 7
Cyrille Grandval
Développeur PHP depuis + de 15 ans & Zend Evangelist (membre Z-Team)
Fondateur Darkmira et Darkmira Brasi...
Roadmap
Support de PHP
Pourquoi PHP7 ?
Incompatibilités
Nouveautés
Testez votre code
Support PHP
http://php.net/supported-versions.php
Active support Security Fixes only End of life
Le 8 Juin 2015 - 20 ans de PHP !!
Timeline
Jusqu’au 15 Mars
Lister les RFC restantes dont l’objectif est d’être dans PHP7
16 Mars au 15 Juin
Finaliser l’imp...
Sortie de PHP 7
Sortie de PHP 7
Octobre 2015
Pourquoi PHP 7 ?
Un seul mot
PERFORMANCE
http://www.zend.com/en/resources/php7_infographic
Nouveau logo by Vincent Pontier
Vincent Pontier
http://www.elroubio.net/
Twitter : @Elroubio
Créateur de l’ElePHPant
http:...
Incompatibilités
Peu de BC Break
Doit permettre de passer à
PHP7 sans trop de
modifications
Incompatibilités
Suppression des fonctionnalités dépréciées
https://wiki.php.net/rfc/remove_deprecated_functionality_in_ph...
Incompatibilités
● Les constructeurs PHP4 sont maintenant dépréciés !
<?php
class IlEtaitTemps {
public function iletaitte...
Incompatibilités
● Certains types sont devenus des mots clés réservés
pour les noms de classes, traits et interfaces
● int...
Incompatibilités
● Suppression des ASP et script tags
<script language=”PHP”></script>
<% %>
<%= %>
● switch n’accepte plu...
Incompatibilités
● Un octal invalide produit maintenant une erreur
PHP 5 PHP 7
<?php
$octale = 0148;
echo $octale; // Affi...
Incompatibilités
● Nouveau caractère u
Permet de spécifier un caractère Unicode et
particulièrement UTF-8 (en hexadécimal)...
Incompatibilités
● L’assignation du résultat d’un new par référence n’est
plus possible
● La redéfinition d’un argument d’...
Incompatibilités
● Les 2 fonctions func_get_arg et func_get_args
retournent la valeur d’une variable dans le contexte
loca...
Uniforme Variable Syntax
https://wiki.php.net/rfc/uniform_variable_syntax
Une nouvelle syntaxe interne de variable a été i...
Scalar type hinting
PHP7 offre la possibilité de spécifier un type scalaire (string, integer,
float, boolean) pour le type...
Return type declaration
https://wiki.php.net/rfc/return_types
Les méthodes constructeurs, destructeurs et clone ne peuvent...
Group use declaration
https://wiki.php.net/rfc/group_use_declarations
● Regroupement de déclaration use d’un namespace com...
Anonymous Class
https://wiki.php.net/rfc/return_types
Même principe que les fonctions anonymes
PHP5 PHP7
<?php
class Log {...
Starship Operator
https://wiki.php.net/rfc/combined-comparison-operator
<?php
function order_func($a, $b) {
return ($a < $...
Null Coalesce Operator
https://wiki.php.net/rfc/isset_ternary
● L’opérateur ?? retourne le résultat de l’opération de gauc...
Exception Engine
https://wiki.php.net/rfc/engine_exceptions_for_php7
● Possibilité d’attraper les erreurs fatales au trave...
Exception Engine
● Nouveau schéma d’exception de PHP7
BaseException
- EngineException
- TypeException
- ParseException
- E...
Enorme gain de
performances
+
Peu de BC Break
=
Migration assurée et rapide
Testez votre code
Vous pouvez déjà tester vos applications !!
● Build PHP7 fourni par Zend
Installation packages for Ubunt...
Prochain SlideShare
Chargement dans…5
×

Nouveautés php 7

5 017 vues

Publié le

Conférence d'ouverture du deuxième webday de l'esgi.
Présentation des nouveautés de PHP7, l'état du support des versions de PHP, les incompatibilités (backwards compatibility breaks), les nouvelles fonctionnalités, et les moyens pour tester son application dès maintenant.

Publié dans : Internet
0 commentaire
10 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
5 017
Sur SlideShare
0
Issues des intégrations
0
Intégrations
131
Actions
Partages
0
Téléchargements
76
Commentaires
0
J’aime
10
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Nouveautés php 7

  1. 1. Webday ESGI - 11 Juin 2015 Nouveautés PHP 7
  2. 2. Cyrille Grandval Développeur PHP depuis + de 15 ans & Zend Evangelist (membre Z-Team) Fondateur Darkmira et Darkmira Brasil Professeur / Formateur PHP et Sécurité des applications Web Co-auteur du livre « Préparation à la certification Zend Certified PHP Engineer - ZCPE » aux éditions ENI cgrandval@darkmira.com Twitter : @CyrilleGrandval
  3. 3. Roadmap Support de PHP Pourquoi PHP7 ? Incompatibilités Nouveautés Testez votre code
  4. 4. Support PHP http://php.net/supported-versions.php Active support Security Fixes only End of life
  5. 5. Le 8 Juin 2015 - 20 ans de PHP !!
  6. 6. Timeline Jusqu’au 15 Mars Lister les RFC restantes dont l’objectif est d’être dans PHP7 16 Mars au 15 Juin Finaliser l’implémentation et les tests des nouvelles fonctionnalités 16 Juin au 15 Octobre Cycles de Release Candidate ….. https://wiki.php.net/rfc/php7timeline
  7. 7. Sortie de PHP 7 Sortie de PHP 7 Octobre 2015
  8. 8. Pourquoi PHP 7 ? Un seul mot PERFORMANCE http://www.zend.com/en/resources/php7_infographic
  9. 9. Nouveau logo by Vincent Pontier Vincent Pontier http://www.elroubio.net/ Twitter : @Elroubio Créateur de l’ElePHPant http://elephpant.com/
  10. 10. Incompatibilités Peu de BC Break Doit permettre de passer à PHP7 sans trop de modifications
  11. 11. Incompatibilités Suppression des fonctionnalités dépréciées https://wiki.php.net/rfc/remove_deprecated_functionality_in_php7 Exemple ext/mySQL (dépréciée depuis PHP5.5) -> utiliser PDO_MySQL ou MySQLi ext/ereg (depuis PHP 5.3) -> utiliser ext/pcre
  12. 12. Incompatibilités ● Les constructeurs PHP4 sont maintenant dépréciés ! <?php class IlEtaitTemps { public function iletaittemps() { … } } new IlEtaitTemps(); https://wiki.php.net/rfc/remove_php4_constructors Petit rappel : Les constructeurs PHP4 ne sont déjà plus reconnus dans une classe d’un namespace
  13. 13. Incompatibilités ● Certains types sont devenus des mots clés réservés pour les noms de classes, traits et interfaces ● int ● float ● bool ● string ● true ● false ● null ● resource ● object ● mixed ● numeric https://wiki.php.net/rfc/reserve_more_types_in_php_7 https://wiki.php.net/rfc/reserve_even_more_types_in_php_7 <?php class resource { public function __construct() { … } } new resource(); // Retourne une fatal erreur, Fatal error: "resource" cannot be used as a classname ...
  14. 14. Incompatibilités ● Suppression des ASP et script tags <script language=”PHP”></script> <% %> <%= %> ● switch n’accepte plus plusieurs default <?php switch ($expression) { default: echo 'Olá'; break; default: echo 'Tchau'; break; } Retourne maintenant : Fatal error: Switch statements may only contain one default clause
  15. 15. Incompatibilités ● Un octal invalide produit maintenant une erreur PHP 5 PHP 7 <?php $octale = 0148; echo $octale; // Affiche 12 <?php $octale = 0148; echo $octale; // Fatal Error : Invalid numeric literal …. ● Les chaînes de caractères hexadécimales ne sont plus reconnues PHP 5 PHP 7 <?php var_dump(is_numeric('0x143')); // bool(true) <?php var_dump(is_numeric('0x143')); // bool(false)
  16. 16. Incompatibilités ● Nouveau caractère u Permet de spécifier un caractère Unicode et particulièrement UTF-8 (en hexadécimal) <?php $unicode = "u{265C}; echo $unicode; Incompatibilité car u dans une double-quote ou HEREDOC existant sera considéré comme un caractère Unicode. Si celui-ci n’existe pas, une erreur fatale de compilation est levée https://wiki.php.net/rfc/unicode_escape
  17. 17. Incompatibilités ● L’assignation du résultat d’un new par référence n’est plus possible ● La redéfinition d’un argument d’une fonction n’est plus possible <?php $objet = &new stdclass; // Retourne une erreur de parser <?php function test($param, $valid, $valid) { … } // Retourne une erreur fatale : Fatal error: Redefinition of parameter $valid ….
  18. 18. Incompatibilités ● Les 2 fonctions func_get_arg et func_get_args retournent la valeur d’une variable dans le contexte local PHP 5 PHP 7 <?php function samba($samba) { $samba++; echo func_get_arg(0); // Affiche 2 } samba(2); <?php function samba($samba) { $samba++; echo func_get_arg(0); // Affiche 3 } samba(2); Désormais, la stacktrace d’exception affiche également les valeurs des variables dans le contexte local.
  19. 19. Uniforme Variable Syntax https://wiki.php.net/rfc/uniform_variable_syntax Une nouvelle syntaxe interne de variable a été introduite en PHP7. Variables, propriétés et méthodes ne sont plus interpretées de la même manière. Maintenant interprété de gauche à droite. Nouvelles possibilités / obligations comme : ● ($object->closureProperty)() ● Enchaînement d’appels statiques $foo::$bar::$bat ● global ${$foo->bar} au lieu de global $$foo->bar (global n’accepte plus que des variables simples)
  20. 20. Scalar type hinting PHP7 offre la possibilité de spécifier un type scalaire (string, integer, float, boolean) pour le type hinting Activer en ajoutant declare(strict_types=1); en première instruction du fichier <?php declare(strict_types=1); function test(int $param) { …. return $param; } echo test(1); // Affiche 1 echo test("1"); // Fatal error: Argument 1 passed to test() must be of the type integer, string given, ….
  21. 21. Return type declaration https://wiki.php.net/rfc/return_types Les méthodes constructeurs, destructeurs et clone ne peuvent pas déclarer de type de retour. <?php function test(): DateTime { return 1; // Type de retour invalide } ● Possibilité de définir le type de retour attendu Une catchable fatal error est retournée si le type ne correspond pas <?php function test(): array { return [0,1,2]; // Type de retour valide } <?php function test(): int { return 1; // Type de retour invalide } Catchable fatal error: Return value of test() must be an instance of int, integer returned in %s on line %d
  22. 22. Group use declaration https://wiki.php.net/rfc/group_use_declarations ● Regroupement de déclaration use d’un namespace commun PHP 5 PHP 7 <?php use DarkmiraComponentSecurityClassA; use DarkmiraComponentSecurityClassB; use DarkmiraComponentBddClassC; <?php use DarkmiraComponent{ SecurityClassA, SecurityClassB, BddClassC };
  23. 23. Anonymous Class https://wiki.php.net/rfc/return_types Même principe que les fonctions anonymes PHP5 PHP7 <?php class Log { public function log ($msg) { … } } $obj->setLog(new Log()); <?php $obj->setLog(new class { public function log ($msg) { … } });
  24. 24. Starship Operator https://wiki.php.net/rfc/combined-comparison-operator <?php function order_func($a, $b) { return ($a < $b) ? -1 : (($a > $b) ? 1 : 0); } <?php function order_func($a, $b) { return $a <=> $b; } Opérateur de comparaison (Combined Comparison Operator) ● identique aux fonctions strcmp() et version_compare() ● mais peut comparer tous les types du moment qu’ils sont identiques de part et d’autre de l’opérateur : chaînes, array, objets, …. ● Retourne 0 si égal ● Retourne -1 si la valeur de gauche est inférieure ● Retourne 1 si la valeur de droite est inférieure PHP5 PHP7
  25. 25. Null Coalesce Operator https://wiki.php.net/rfc/isset_ternary ● L’opérateur ?? retourne le résultat de l’opération de gauche si celui-ci n’est pas NULL sinon le résultat de l’opération de droite PHP 5 PHP 7 <?php $name = ($_GET['name']) ? $_GET['name'] : 'default'; <?php $name = $_GET['name'] ?? 'default'; Ces opérateurs peuvent être enchaînés pour retourner le premier résultat non null d’un ensemble. <?php $name = $_GET['name'] ?? $aBdd['name'] ?? 'default';
  26. 26. Exception Engine https://wiki.php.net/rfc/engine_exceptions_for_php7 ● Possibilité d’attraper les erreurs fatales au travers d’exception ○ si non attrapée, une erreur fatale “normale” est retournée <?php try { test(); } catch (EngineException $e) { echo $e->getMessage(); } final { // Exécuté malgré l’erreur fatale } Plusieurs erreurs de parsing (spécialement avec eval) peuvent être attrapées à l’aide de la classe ParseException.
  27. 27. Exception Engine ● Nouveau schéma d’exception de PHP7 BaseException - EngineException - TypeException - ParseException - Exception (déjà présente en PHP5)
  28. 28. Enorme gain de performances + Peu de BC Break = Migration assurée et rapide
  29. 29. Testez votre code Vous pouvez déjà tester vos applications !! ● Build PHP7 fourni par Zend Installation packages for Ubuntu 14.04 and CentOS 7 (and compatible distros), Dockerfile for Docker, Tarballs for Ubuntu and CentOS http://php7.zend.com/ ● php7dev de Rasmus Lerdorf VM Debian8 préconfiguré avec plusieurs versions de PHP dont PHP7 https://github.com/rlerdorf/php7dev ● Build VM easily with PuPHPet http://www.sitepoint.com/build-virtual-machines-easily-puphpet/

×