SlideShare una empresa de Scribd logo
1 de 29
Descargar para leer sin conexión
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 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
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’implémentation et les tests des nouvelles
fonctionnalités
16 Juin au 15 Octobre
Cycles de Release Candidate
…..
https://wiki.php.net/rfc/php7timeline
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://elephpant.com/
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_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
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
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
...
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
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)
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
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 ….
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.
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)
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, ….
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
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
};
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) { … }
});
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
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';
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.
Exception Engine
● Nouveau schéma d’exception de PHP7
BaseException
- EngineException
- TypeException
- ParseException
- Exception (déjà présente en PHP5)
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 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/

Más contenido relacionado

La actualidad más candente

Trucs et astuces PHP et MySQL
Trucs et astuces PHP et MySQLTrucs et astuces PHP et MySQL
Trucs et astuces PHP et MySQLDamien Seguy
 
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINEMarouan OMEZZINE
 
PHP 1 - Apprendre les bases
PHP 1 - Apprendre les basesPHP 1 - Apprendre les bases
PHP 1 - Apprendre les basesPierre Faure
 
Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScriptKristen Le Liboux
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5julien pauli
 
JavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentauxJavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentauxVincent Petetin
 
Php 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPierre Faure
 
ZendFramework2 - Présentation
ZendFramework2 - PrésentationZendFramework2 - Présentation
ZendFramework2 - Présentationjulien pauli
 
PHP - get started
PHP - get startedPHP - get started
PHP - get startedmazenovi
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptMicrosoft
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech daysJean-Pierre Vincent
 
.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHPAbdoulaye Dieng
 
Cours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partieCours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partiekadzaki
 
La référence Clear php
La référence Clear phpLa référence Clear php
La référence Clear phpDamien Seguy
 

La actualidad más candente (20)

Trucs et astuces PHP et MySQL
Trucs et astuces PHP et MySQLTrucs et astuces PHP et MySQL
Trucs et astuces PHP et MySQL
 
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINE
 
PHP 1 - Apprendre les bases
PHP 1 - Apprendre les basesPHP 1 - Apprendre les bases
PHP 1 - Apprendre les bases
 
Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScript
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5
 
JavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentauxJavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentaux
 
Cours php
Cours phpCours php
Cours php
 
PHP Training
PHP TrainingPHP Training
PHP Training
 
Php 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVC
 
ZendFramework2 - Présentation
ZendFramework2 - PrésentationZendFramework2 - Présentation
ZendFramework2 - Présentation
 
PHP - get started
PHP - get startedPHP - get started
PHP - get started
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
Cours javascript v1
Cours javascript v1Cours javascript v1
Cours javascript v1
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech days
 
.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP
 
Php
PhpPhp
Php
 
Cours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partieCours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partie
 
La référence Clear php
La référence Clear phpLa référence Clear php
La référence Clear php
 
Php cours
Php coursPhp cours
Php cours
 

Destacado

PHP 7.0 : aperçu des nouveautés
PHP 7.0 : aperçu des nouveautésPHP 7.0 : aperçu des nouveautés
PHP 7.0 : aperçu des nouveautésDidcode
 
A new way to develop with WordPress!
A new way to develop with WordPress!A new way to develop with WordPress!
A new way to develop with WordPress!David Sanchez
 
Presentation of Python, Django, DockerStack
Presentation of Python, Django, DockerStackPresentation of Python, Django, DockerStack
Presentation of Python, Django, DockerStackDavid Sanchez
 
Design pattern in Symfony2 - Nanos gigantium humeris insidentes
Design pattern in Symfony2 - Nanos gigantium humeris insidentesDesign pattern in Symfony2 - Nanos gigantium humeris insidentes
Design pattern in Symfony2 - Nanos gigantium humeris insidentesGiulio De Donato
 
Les Applications CRM mobile Tunisie Telecom Pour BlackBerry
Les Applications CRM mobile Tunisie Telecom Pour BlackBerryLes Applications CRM mobile Tunisie Telecom Pour BlackBerry
Les Applications CRM mobile Tunisie Telecom Pour BlackBerrytunisieblackberry
 
Système de gestion de tickets
Système de gestion de ticketsSystème de gestion de tickets
Système de gestion de ticketsraymen87
 
Rapport dridi sahar_tunisie_telecom
Rapport dridi sahar_tunisie_telecomRapport dridi sahar_tunisie_telecom
Rapport dridi sahar_tunisie_telecomsahar dridi
 
2015 07 14_presentation-pfe-gestion-parc-informatique
2015 07 14_presentation-pfe-gestion-parc-informatique2015 07 14_presentation-pfe-gestion-parc-informatique
2015 07 14_presentation-pfe-gestion-parc-informatiqueUsmiste Rosso
 
Bonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHPBonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHPPascal MARTIN
 

Destacado (20)

PHP 7.0 : aperçu des nouveautés
PHP 7.0 : aperçu des nouveautésPHP 7.0 : aperçu des nouveautés
PHP 7.0 : aperçu des nouveautés
 
PHP 7
PHP 7PHP 7
PHP 7
 
A new way to develop with WordPress!
A new way to develop with WordPress!A new way to develop with WordPress!
A new way to develop with WordPress!
 
PHP7 Presentation
PHP7 PresentationPHP7 Presentation
PHP7 Presentation
 
Rapport de fin de stage maintenance info
Rapport de fin de stage  maintenance infoRapport de fin de stage  maintenance info
Rapport de fin de stage maintenance info
 
Presentation of Python, Django, DockerStack
Presentation of Python, Django, DockerStackPresentation of Python, Django, DockerStack
Presentation of Python, Django, DockerStack
 
PHP 7 - Think php7
PHP 7 - Think php7PHP 7 - Think php7
PHP 7 - Think php7
 
Modern PHP
Modern PHPModern PHP
Modern PHP
 
Design pattern in Symfony2 - Nanos gigantium humeris insidentes
Design pattern in Symfony2 - Nanos gigantium humeris insidentesDesign pattern in Symfony2 - Nanos gigantium humeris insidentes
Design pattern in Symfony2 - Nanos gigantium humeris insidentes
 
Projet glpi
Projet glpiProjet glpi
Projet glpi
 
Les Applications CRM mobile Tunisie Telecom Pour BlackBerry
Les Applications CRM mobile Tunisie Telecom Pour BlackBerryLes Applications CRM mobile Tunisie Telecom Pour BlackBerry
Les Applications CRM mobile Tunisie Telecom Pour BlackBerry
 
Système de gestion de tickets
Système de gestion de ticketsSystème de gestion de tickets
Système de gestion de tickets
 
Rapport dridi sahar_tunisie_telecom
Rapport dridi sahar_tunisie_telecomRapport dridi sahar_tunisie_telecom
Rapport dridi sahar_tunisie_telecom
 
2015 07 14_presentation-pfe-gestion-parc-informatique
2015 07 14_presentation-pfe-gestion-parc-informatique2015 07 14_presentation-pfe-gestion-parc-informatique
2015 07 14_presentation-pfe-gestion-parc-informatique
 
Bonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHPBonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHP
 
Introduce php7
Introduce php7Introduce php7
Introduce php7
 
What’s New in PHP7?
What’s New in PHP7?What’s New in PHP7?
What’s New in PHP7?
 
PHP7 e Rich Domain Model
PHP7 e Rich Domain ModelPHP7 e Rich Domain Model
PHP7 e Rich Domain Model
 
Continuous Quality Assurance
Continuous Quality AssuranceContinuous Quality Assurance
Continuous Quality Assurance
 
PHP7: Hello World!
PHP7: Hello World!PHP7: Hello World!
PHP7: Hello World!
 

Similar a Nouveautés php 7

Php_Mysql.pdf
Php_Mysql.pdfPhp_Mysql.pdf
Php_Mysql.pdfETTAMRY
 
Cours php -partie 1.pdf
Cours php -partie 1.pdfCours php -partie 1.pdf
Cours php -partie 1.pdfssuserc46a93
 
Cours Programmation web en PHP Cours Programmation web en PHP
Cours Programmation web en PHP Cours Programmation web en PHPCours Programmation web en PHP Cours Programmation web en PHP
Cours Programmation web en PHP Cours Programmation web en PHPBassim ELKHATTABY
 
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdfCours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdfRihabBENLAMINE
 
seance4-1 php.ppt
seance4-1 php.pptseance4-1 php.ppt
seance4-1 php.pptAmineReal
 
Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4Damien Seguy
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7neuros
 
Programmation web cours php -- sahmi academy
Programmation web   cours php -- sahmi academyProgrammation web   cours php -- sahmi academy
Programmation web cours php -- sahmi academySoufiane SAHMI
 
Developpement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdfDeveloppement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdfrachidimstapha
 
Php 7.4 2020-01-28 - afup
Php 7.4   2020-01-28 - afupPhp 7.4   2020-01-28 - afup
Php 7.4 2020-01-28 - afupJulien Vinber
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP NextSQLI
 
Présentation de PHP 5.4 [FR]
Présentation de PHP 5.4 [FR]Présentation de PHP 5.4 [FR]
Présentation de PHP 5.4 [FR]Wixiweb
 

Similar a Nouveautés php 7 (20)

Php_Mysql.pdf
Php_Mysql.pdfPhp_Mysql.pdf
Php_Mysql.pdf
 
Initiation au langage PHP
Initiation au langage PHPInitiation au langage PHP
Initiation au langage PHP
 
PHP5: Endgame
PHP5: EndgamePHP5: Endgame
PHP5: Endgame
 
Cours php -partie 1.pdf
Cours php -partie 1.pdfCours php -partie 1.pdf
Cours php -partie 1.pdf
 
Cours Programmation web en PHP Cours Programmation web en PHP
Cours Programmation web en PHP Cours Programmation web en PHPCours Programmation web en PHP Cours Programmation web en PHP
Cours Programmation web en PHP Cours Programmation web en PHP
 
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdfCours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
 
seance4-1 php.ppt
seance4-1 php.pptseance4-1 php.ppt
seance4-1 php.ppt
 
Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7
 
PHP.pptx
PHP.pptxPHP.pptx
PHP.pptx
 
Php seance1
Php seance1Php seance1
Php seance1
 
Programmation web cours php -- sahmi academy
Programmation web   cours php -- sahmi academyProgrammation web   cours php -- sahmi academy
Programmation web cours php -- sahmi academy
 
Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?
 
La première partie de la présentation PHP
La première partie de la présentation PHPLa première partie de la présentation PHP
La première partie de la présentation PHP
 
Developpement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdfDeveloppement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdf
 
PHP mysql Xml.pdf
PHP mysql Xml.pdfPHP mysql Xml.pdf
PHP mysql Xml.pdf
 
PHP mysql Xml.doc
PHP mysql Xml.docPHP mysql Xml.doc
PHP mysql Xml.doc
 
Php 7.4 2020-01-28 - afup
Php 7.4   2020-01-28 - afupPhp 7.4   2020-01-28 - afup
Php 7.4 2020-01-28 - afup
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP Next
 
Présentation de PHP 5.4 [FR]
Présentation de PHP 5.4 [FR]Présentation de PHP 5.4 [FR]
Présentation de PHP 5.4 [FR]
 

Más de Cyrille Grandval

Hackeando sua aplicaçao php na pratica
Hackeando sua aplicaçao php na pratica Hackeando sua aplicaçao php na pratica
Hackeando sua aplicaçao php na pratica Cyrille Grandval
 
Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Cyrille Grandval
 
Sécuriser mes applications avec ZF2
Sécuriser mes applications avec ZF2Sécuriser mes applications avec ZF2
Sécuriser mes applications avec ZF2Cyrille Grandval
 
Quer segurar sua aplicação? Hackeie a primeiro(a)!
Quer segurar sua aplicação? Hackeie a primeiro(a)!Quer segurar sua aplicação? Hackeie a primeiro(a)!
Quer segurar sua aplicação? Hackeie a primeiro(a)!Cyrille Grandval
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...Cyrille Grandval
 
Durcissement de code - Sécurité Applicative Web
Durcissement de code - Sécurité Applicative WebDurcissement de code - Sécurité Applicative Web
Durcissement de code - Sécurité Applicative WebCyrille Grandval
 

Más de Cyrille Grandval (6)

Hackeando sua aplicaçao php na pratica
Hackeando sua aplicaçao php na pratica Hackeando sua aplicaçao php na pratica
Hackeando sua aplicaçao php na pratica
 
Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2
 
Sécuriser mes applications avec ZF2
Sécuriser mes applications avec ZF2Sécuriser mes applications avec ZF2
Sécuriser mes applications avec ZF2
 
Quer segurar sua aplicação? Hackeie a primeiro(a)!
Quer segurar sua aplicação? Hackeie a primeiro(a)!Quer segurar sua aplicação? Hackeie a primeiro(a)!
Quer segurar sua aplicação? Hackeie a primeiro(a)!
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
 
Durcissement de code - Sécurité Applicative Web
Durcissement de code - Sécurité Applicative WebDurcissement de code - Sécurité Applicative Web
Durcissement de code - Sécurité Applicative Web
 

Nouveautés php 7

  • 1. Webday ESGI - 11 Juin 2015 Nouveautés PHP 7
  • 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. Roadmap Support de PHP Pourquoi PHP7 ? Incompatibilités Nouveautés Testez votre code
  • 5. Le 8 Juin 2015 - 20 ans de PHP !!
  • 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. Sortie de PHP 7 Sortie de PHP 7 Octobre 2015
  • 8. Pourquoi PHP 7 ? Un seul mot PERFORMANCE http://www.zend.com/en/resources/php7_infographic
  • 9. Nouveau logo by Vincent Pontier Vincent Pontier http://www.elroubio.net/ Twitter : @Elroubio Créateur de l’ElePHPant http://elephpant.com/
  • 10. Incompatibilités Peu de BC Break Doit permettre de passer à PHP7 sans trop de modifications
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Exception Engine ● Nouveau schéma d’exception de PHP7 BaseException - EngineException - TypeException - ParseException - Exception (déjà présente en PHP5)
  • 28. Enorme gain de performances + Peu de BC Break = Migration assurée et rapide
  • 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/