php 7 et symfony 3
TRANSCRIPT
Sortie de PHP 7
3 décembre 2015Nouveau logo :
PONTIER Vincent
http://elroubio.net
PHP 7 —> PHPNG (Next Generation)https://wiki.php.net/phpng
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é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';
RoadmapSortie de SYMFONY 3.0 novembre 2015
http://symfony.com/doc/current/contributing/community/releases.html
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
… …