php 7 et symfony 3

34
Les nouveautés de PHP 7 et de Symfony 3.0 by RICHARD Eddy APERO PHP 23/02/2016

Upload: eddy-richard

Post on 21-Feb-2017

914 views

Category:

Internet


3 download

TRANSCRIPT

Les nouveautés de PHP 7et de Symfony 3.0

by RICHARD Eddy

APERO PHP 23/02/2016

PHP 7

PHP Roadmap

Active support Security fixes only End of life

Sortie de PHP 7

3 décembre 2015Nouveau logo :

PONTIER Vincent

http://elroubio.net

PHP 7 —> PHPNG (Next Generation)https://wiki.php.net/phpng

Pourquoi PHP 7 ?

Pourquoi PHP 7 ?

Un seul mot

PERFORMANCES

IncompatibilitéSuppression des fonctionnalités dépréciées

https://wiki.php.net/rfc/remove_deprecated_functionality_in_php7

ext/mySQL

Exemple :

PDO_MySQL ou MySQLi(dépréciée depuis PHP5.5)

ext/ereg ext/pcre(dépréciée depuis PHP5.3)

IncompatibilitéLes constructeurs PHP 4 sont maintenant dépréciés !

https://wiki.php.net/rfc/remove_php4_constructors

<?php class IlEtaitTemps { public function iletaittemps() { … } }

new IlEtaitTemps();

Les constructeurs PHP4 ne sont plus reconnus dans une classe d’un namespace.

IncompatibilitéCertains types sont devenus des mots clés réservés pour les

noms de classes, traits et interfaces

https://wiki.php.net/rfc/reserve_more_types_in_php_7 https://wiki.php.net/rfc/reserve_even_more_types_in_php_7

- int - float - bool - string - true - false - null - resource - object - mixed - numeric

<?php class resource { public function __construct() { … }

} new resource();

Retourne une fatal erreur, Fatal error:"resource" cannot be used as a classname

Incompatibilité

Suppression des ASP et script tags

<script language=”PHP”></script> <% %> <%= %>

Incompatibilitéswitch n’accepte plus plusieurs default

<?php switch ($expression) { default: echo 'Olá'; break; default: echo 'Tchau'; break; }

Fatal error: Switch statements mayonly contain one default clause

IncompatibilitéUn octal invalide produit maintenant une erreur

<?php $octale = 0148; echo $octale;

PHP 5.x PHP 7

Affiche 12 Fatal Error : Invalid numeric literal ….

IncompatibilitéLes chaînes de caractères hexadécimales ne sont plus reconnues

<?php var_dump(is_numeric('0x143'));

PHP 5.x PHP 7

bool(true) bool(false)

IncompatibilitéNouveau caractère \u Permet de spécifier un caractère Unicode et

particulièrement UTF-8 (en hexadécimal)

https://wiki.php.net/rfc/unicode_escape

<?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

IncompatibilitéL’assignation du résultat d’un new par

référence n’est plus possible

<?php $objet = &new stdclass;

Retourne une erreur de parser

IncompatibilitéLa redéfinition d’un argument d’une fonction

n’est plus possible

<?php function test($param, $valid, $valid) { … }

Retourne une erreur fatale : Fatal error: Redefinition of parameter $valid ….

IncompatibilitéLes 2 fonctions func_get_arg et func_get_args

retournent la valeur d’une variable dans le contexte local

<?php function samba($samba) { $samba++; echo func_get_arg(0); } samba(2);

PHP 5.x PHP 7

Affiche 2 Affiche 3

Scalar type hintingPHP7 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); echo test("1");

Affiche 1 Fatal error: Argument 1 passed to test()…

Return type declarationPossibilité de définir le type de retour attendu

Une catchable fatal error est retournée si le type ne correspond pas

<?php function test(): DateTime {

return 1; }

<?php function test(): array { return [0,1,2]; }

Type de retour invalide

Type de retour valide

Les méthodes constructeurs, destructeurs et clones ne peuvent pas déclarer de type de retour.

Group use declarationRegroupement de déclaration use d’un namespace commun

https://wiki.php.net/rfc/group_use_declarations

<?php use Darkmira\Component\Security\ClassA; use Darkmira\Component\Security\ClassB; use Darkmira\Component\Bdd\ClassC as classC;

<?php use Darkmira\Component\{ Security\ClassA, Security\ClassB, Bdd\ClassC as classC };

Anonymous ClassMême principe que les fonctions anonymes

https://wiki.php.net/rfc/return_types

<?php class Log { public function log ($msg) { … } } $obj->setLog(new Log());

<?php $obj->setLog(new class { public function log ($msg) { … } });

Starship OperatorOpérateur de comparaison (Combined Comparison Operator)

https://wiki.php.net/rfc/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-1 si la valeur de gauche est inférieure1 si la valeur de droite est inférieure

<?php function order_func($a, $b) { return ($a < $b) ? -1 : (($a > $b) ? 1 : 0) ; }

<?php function order_func($a, $b){ return $a <=> $b; }

Null Coalesce OperatorL’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 droitehttps://wiki.php.net/rfc/isset_ternary

<?php $name = isset($_GET['name']) ? $_GET['name'] : 'default';

<?php $name = $_GET['name'] ?? 'default';

Enorme gain de performances

+ Peu de BC Break

= Migration assurée et rapide

Symfony 3.0

RoadmapSortie de SYMFONY 3.0 novembre 2015

http://symfony.com/doc/current/contributing/community/releases.html

Version LTS(Long Term Support)

36 mois (3 ans)

2.x : 2.7 - 2.8 3.x : 3.4

Suppression des fonctions obsolètes

Version minimum de PHP revue à la hausse 5.5 —> 5.6

La version 2.8 (LTS) intègre les fonctionnalisés de la version 3.0 en

conservant la rétro compatibilité avec les précédentes versions.

Des changements dans son architecture bas niveau

- Changement dans les signatures de méthode

- Remplacements et redéfinitions de classes et méthodes

- Adaptation aux nouvelles normes PSR (Propose a Standards Recommendation) http://www.php-fig.org/

-Modifications mineures d’architectures

- Modifications dans la structure des fichiers

Les normes PSRPSR : Propose a Standards Recommendation

Recommandations validées par PHP Framework Interoperability Group http://www.php-fig.org/

PSR-O : chargement des classes PHP et de l’autoloading

PSR-1 : fixe les conventions minimales de codage

PSR-2 : défini le style et l’organisation du code

PSR-3 : s’occupe de l’interface des loggers

… …

Architecture des fichiers : SYMFONY 2.x VS SYMFONY 3.0

MERCI

@edrichardfr