PHP 5.3 : les nouveaut©s du futur si proche

  • View
    5.486

  • Download
    1

Embed Size (px)

DESCRIPTION

PHP 5.3 vient de sortir en version alpha3 ; les fonctionnalités sont maintenant figées. La version stable devrait arriver aux environs du printemps 2009 ; que nous apportera-t-elle ? Closures, namespaces, goto, optimisations, internationalisations... Finalement, une mise à jour "mineure" apportant un lot extrêmement important de nouveautés ! Ces slides sont ceux que j'ai présenté au forum PHP Paris 2008 organisé par l'AFUP.

Text of PHP 5.3 : les nouveaut©s du futur si proche

  • 1. Nouveauts PHP 5.3 Pascal MARTIN Quenousrserve l'avenir?

2. Nouveauts PHP 5.3 Pascal MARTIN Nouveauts de PHP 5.3 Thefutureishere! almost 3. Nouveauts PHP 5.3 Pascal MARTIN Qui suis-je ? Pascal MARTIN Expert technique PHP chez SQLI Membre de la Cellule Architecture PHP Capitalisation Veille technologique Blog perso http://blog.pascal-martin.fr/ Articles techniques PHP & Javascript Dont une srie de 30 articles sur les Nouveauts de PHP 5.3 4. Nouveauts PHP 5.3 Pascal MARTINIntroduction Versions de PHP 4.4.9 : Aot 2008 plus maintenu ! 5.0.0 : juillet 2004 5.1.0 : Novembre 2005 5.2.0 : Novembre 2006 5.2.6 : Mai 2008 ; 5.2.7 : Dcembre 2008 bientt 5.2.8 ? Grand nombre de nouveauts attendues ! Pas au point de changer de version majeure ? PHP 6 est encore loin ! PHP 5.3 Versions testables : printemps 2008 1re version alpha : 1er aot 2008 5. Nouveauts PHP 5.3 Pascal MARTINPack d'exemples / tests Srie d'exemples et de tests Couvrant la quasi-totalit des nouveauts de PHP 5.3 Plus en dtails que ce que je prsenterai ici Tlchargeable depuis mon blog http://blog.pascal-martin.fr/public/php-5.3/php-5.3-exemples.tar.bz2 Mis jour quand j'effectue de nouveaux test 6. Nouveauts PHP 5.3 Pascal MARTIN E_DEPRECATED Nouveau niveau de rapport d'erreurs E_DEPRECATED Objectif Identifier les fonctionnalits dprcies Qui seront probablement supprimes pour une prochaineversion Pour PHP 6, typiquement 7. Nouveauts PHP 5.3 Pascal MARTIN Constante magique __DIR__ Travail par rapport au rpertoire o se trouve un fichier Inclusion d'un fichier .php require_once(dirname(__FILE__) . '/../mon-fichier.php'); Long crire, risque de fautes de frappe valu l'excution PHP 5.3 : nouvelle constante magique __DIR__ require_once(__DIR__ . '/../mon-fichier.php'); valu la compilation Plus rapide excuter Et plus court crire 8. Nouveauts PHP 5.3 Pascal MARTIN Saut inconditionnel : goto Ajout de l'instruction goto Et de la notion de label (tiquette) echo '

a

';goto c; echo '

b

';c: echo '

c

'; A noter Pas de saut l'intrieur d'une boucle / d'un switch Autoris l'intrieur d'un if / else (utilit ?) Pas de goto $label; Instructions break et continue non modifies Sortie de boucles imbriques : break 2; Pas de break label; 9. Nouveauts PHP 5.3 Pascal MARTIN LSB Late Static Binding PHP 5.2 : rsolution statique la compilation class Vehicule { public static function a() { echo '' . __CLASS__ . '';} // Etape 3 : quot;Vehiculequot; public static function b() {self::a();} // Etape 2 : PHP 5.2 : quot;selfquot; } class Voiture extends Vehicule { public static function a() {echo '' . __CLASS__ . '';} } Voiture::b(); // Etape 1 PHP 5.3 : rsolution statique tardive class Vehicule { public static function a() {echo '' . __CLASS__ . '';} public static function b() {static::a();} // Etape 2 : PHP 5.3 : LSB : quot;staticquot; } class Voiture extends Vehicule { public static function a() { echo '' . __CLASS__ . '';} // Etape 3 : quot;Voiturequot; } Voiture::b(); // Etape 1 Conservation de self et de son comportement 10. Nouveauts PHP 5.3 Pascal MARTINAppels statiques dynamiques class A { public static function methodeStatique($p1) {PHP $methodName('param1'); dynamiques possibles // A::methode(param1) $staticMethodName = 'methodeStatique'; $className:: $staticMethodName('param1'); // A::methodeStatique(param1) A noter aussi Ajout mthode magique __callStatic Equivalent statique de __call 11. Nouveauts PHP 5.3 Pascal MARTINSyntaxe NOWDOC Depuis PHP 4, syntaxe Heredoc $str = string 'Sacr Coeur' (length=12) 1 => string 'Champs Elyse' (length=14) 2 => string 'Tour Eiffel' (length=11) Plus pratique que create_function ! Plus rapide l'excution Plus lisible coloration syntaxique ! vite la cration de fonctions nommes, usage unique 16. Nouveauts PHP 5.3 Pascal MARTIN Lambdas et Closures 3 use : Import d'une variable externe $var = 'World'; $func1 = function () { echo quot;

Hello, $var!

quot;; }; $func2 = function () use ($var) { echo quot;

Hello, $var!

quot;; };$func1(); // Notice: Undefined variable: var => Hello, ! $func2(); // Hello, World! Import en lecture-seule Ou par rfrence : r-utilisation de & Import en lecture-criture $func2 = function () use (& $var) { echo quot;

Dbut 2 : $var

quot;; $var = 2; echo quot;

Fin 2 : $var

quot;; }; 17. Nouveauts PHP 5.3 Pascal MARTIN Lambdas et Closures 4 Cration d'une closure $func = function ($arg) { $compteur = $arg; // Copie prive, en lecture seule return function () use ($compteur) { return ++$compteur; }; }; $a1 = $func(10); $a2 = $func(50);echo 'a1 : ' . $a1() . quot;nquot;; // 11 echo 'a2 : ' . $a2() . quot;nquot;; // 51 echo 'a1 : ' . $a1() . quot;nquot;; // 11 echo 'a2 : ' . $a2() . quot;nquot;; // 51 echo 'a1 : ' . $a1() . quot;nquot;; // 11 echo 'a2 : ' . $a2() . quot;nquot;; // 51 Fonction interne force la conservation de la valeur de $compteurC'est le principe mme d'une closure ! Aprs Javascript, c'est maintenant possible en PHP ! 18. Nouveauts PHP 5.3 Pascal MARTIN Lambdas et Closures 5 Mme chose, en lecture-criture $func = function ($arg) { $compteur = $arg; // Copie prive, en lecture / criture return function () use (& $compteur) { return ++$compteur; }; }; $a1 = $func(10); $a2 = $func(50);echo 'a1 : ' . $a1() . quot;nquot;; // 11 echo 'a2 : ' . $a2() . quot;nquot;; // 51 echo 'a1 : ' . $a1() . quot;nquot;; // 12 echo 'a2 : ' . $a2() . quot;nquot;; // 52 echo 'a1 : ' . $a1() . quot;nquot;; // 13 echo 'a2 : ' . $a2() . quot;nquot;; // 53 $compteur conserve par la fonction interne$compteur importe par rfrenceAccessible en lecture-criture, donc Comme les closures de Javascript 19. Nouveauts PHP 5.3 Pascal MARTIN intl Internationalisation 1 Extension intl incluse en standard Option enable-intl Objectif : faciliter l'internationalisation (i18n) et la localisation (l10n) d'applications Afficher une date sur un site multi-lingue : 31/12/2008 ? 2008-31-12 ? 12/31/2008 ? Et pour une monnaie : 1,024.12 ? $ 1.024,12 ? Plusieurs nouvelles classes IntlDateFormatter NumberFormatter Locale Collator 20. Nouveauts PHP 5.3 Pascal MARTINIntl Internationalisation 2 Nombres / monnaies echo NumberFormatter::create('fr_FR', NumberFormatter::CURRENCY)- >format(123456789.987654) . quot;nquot;; echo NumberFormatter::create('en_US', NumberFormatter::CURRENCY)- >format(123456789.987654) . quot;nquot;; 123 456 789,99 $123,456,789.99 Dates echo IntlDateFormatter::create('fr_FR', IntlDateFormatter::FULL, IntlDateFormatter::FULL)->format(time()) . quot;nquot;; echo IntlDateFormatter::create('zh-Hant-TW', IntlDateFormatter::FULL, IntlDateFormatter::FULL)->format(time(time())) . quot;nquot;; jeudi 9 octobre 2008 04:21:10 GMT+00:00 2008 10 9 04 21 10 GMT+00:00 Messages $format_FR = 'Le {0,date,full} {1,time,short}, {2,number,integer} pommes cotent {3,number,currency}'; $data = array(time(), time(), 5, 3.1415); echo MessageFormatter::formatMessage('fr_FR', $format_FR, $data) . quot;nquot;; Le jeudi 9 octobre 2008 04:31, 5 pommes cotent 3,14 21. Nouveauts PHP 5.3 Pascal MARTIN Manipulation de dates date_default_timezone_set('Europe/Paris'); PHP >= 4.x $ts1 = strtotime('25/04/2008 13:30:00'); var_dump(date('Y-m-d', $ts1)); string '1970-01-01' (length=10) PHP >= 5.1.0 $date = date_create('25/04/2008 13:30:00'); var_dump($date); boolean false PHP >= 5.3 $date = date_create_from_format('d/m/Y H:i:s', '25/04/2008 13:30:00'); var_dump($date->format('Y-m-d')); string '2008-04-25' (length=10) Nous sommes franais / francophones Non, nos utilisateurs ne connaissent pas le format de dates amricain ! 22. Nouveauts PHP 5.3 Pascal MARTINOprateur ? : revu Oprateur ternaire ; syntaxe parfois redondante $blah = ($identifiant ? $identifiant : 'Erreur'); PHP 5.3 : nouvelle possibilit d'criture condition ? : valeur si faux Si condition est vraie, retour du rsultat de son valuation Sans dupliquer son criture Sinon, retour de la valeur de droite var_dump(true ?: false); // bool(true) var_dump(true ? : false); // bool(true)(fonctionne avec des ' ' entre ? et :) var_dump(false ?: true); // bool(true) var_dump('glop' ?: '');// string(4) quot;glopquot; var_dump(strlen('glop') ?: strlen('')); // int(4) var_dump(isset($a) ?: 10); // int(10) ($a non dfini) $b = 'Hello, World!'; var_dump(isset($b) ?: 10); unset($b); // bool(true) var_dump('' ?: isset($a)); // bool(false) ($a non dfini ; 2 valeurs fausses) 23. Nouveauts PHP 5.3 Pascal MARTINmysqlnd Bibliothque spcialise d'interface PHP MySQL Conue spcialement pour PHP ; intgre PHP Perspectives d'volution MAJ / correctifs en mme temps que PHP Principaux avantages Plus rapide (20 30% plus rapide que libmysql) Amlioration de l'utilisation mmoire Fonctionnalits supplmentaires (statistiques) Driver intgr : pas de dpendance externe Pour le dveloppeur Aucune modification : choix effectu la compilation de PHP Brique en-dessous de mysql, mysqli, PDO 24. Nouveauts PHP 5.3 Pascal MARTIN Phar : PHP Archive PHP Archive quivalent des .jar du monde JAVA Regroupement de plusieurs fichiers en un seul Intgr PHP 5.3 : indpendant de PEAR / PECL Manipulation de fichiers Phar Ajout d'un stream phar Inclusion de fichiers packags au sein d'une Phar Y compris d'un fichier vers l'autre Exemples de possibilits Distribution d'une application entire en un seul fichier Pour les application CLI, et pour les applications Web ! Comme installeur ? Framework packag en un seul fichier ? 25. Nouveauts PHP 5.3 Pascal MARTINAjouts la SPL 1 Itrateurs au niveau du systme de fichiers FileSystemIterator, GlobIterator $motif = __DIR__ . '/*.php'; $fichiers = new GlobIterator($motif); foreach ($fichiers as $fichier) { // $fichier est une instan