SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
Nouveautés PHP 5.3 – Pascal MARTIN




« Que nous 
   réserve 
l'avenir ? »
Nouveautés PHP 5.3 – Pascal MARTIN




Nouveautés de PHP 5.3

   The future is here!
        – almost
Nouveautés 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 série de 30 articles sur les Nouveautés de PHP 5.3
Nouveautés PHP 5.3 – Pascal MARTIN

                                                Introduction
●
    Versions de PHP
    ●
        4.4.9 : Août 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 : Décembre 2008 – bientôt 5.2.8 ?
●
    Grand nombre de nouveautés attendues !
    ●
        Pas au point de changer de version majeure ?
    ●
        PHP 6 est encore loin !
●
    PHP 5.3
    ●
        Versions « testables » : printemps 2008
    ●
        1ère version alpha : 1er août 2008
Nouveautés PHP 5.3 – Pascal MARTIN

                    « Pack » d'exemples / tests
●
    Série d'exemples et de tests
    ●
        Couvrant la quasi-totalité des nouveautés de PHP 5.3
        –   Plus en détails que ce que je présenterai ici
    ●
        Téléchargeable 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
Nouveautés PHP 5.3 – Pascal MARTIN

                                             E_DEPRECATED
●
    Nouveau niveau de rapport d'erreurs
    ●
        « E_DEPRECATED »
    ●
        Objectif
         –   Identifier les fonctionnalités dépréciées
         –   Qui seront probablement supprimées pour une prochaine
             version
              ●
                  Pour PHP 6, typiquement
Nouveautés PHP 5.3 – Pascal MARTIN

                   Constante magique __DIR__
●
    Travail par rapport au répertoire 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'exécution
●
    PHP 5.3 : nouvelle constante magique
    ●   __DIR__
require_once(__DIR__ . '/../mon-fichier.php');
    ●
        Évalué à la compilation
         –   Plus rapide à exécuter
    ●
        Et plus court à écrire
Nouveautés PHP 5.3 – Pascal MARTIN


                Saut inconditionnel : « goto »
●
    Ajout de l'instruction « goto »
    ●
        Et de la notion de « label » (étiquette)
echo '<p>a</p>';

goto c;
echo '<p>b</p>';

c:
echo '<p>c</p>';
●
    A noter
    ●
        Pas de saut à l'intérieur d'une boucle / d'un switch
    ●
        Autorisé à l'intérieur d'un if / else (utilité ?)
    ●
        Pas de « goto $label; »
    ●
        Instructions « break » et « continue » non modifiées
         –   Sortie de boucles imbriquées : «   break 2;   »
         –   Pas de « break label; »
Nouveautés PHP 5.3 – Pascal MARTIN


                      LSB – Late Static Binding
●
    PHP 5.2 : résolution statique à la compilation
class Vehicule {
  public static function a() {
    echo '<pre>' . __CLASS__ . '</pre>';} // 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 '<pre>' . __CLASS__ . '</pre>';}
}
Voiture::b();   // Etape 1
●
    PHP 5.3 : résolution statique « tardive »
class Vehicule {
  public static function a() {echo '<pre>' . __CLASS__ . '</pre>';}
  public static function b() {static::a();} // Etape 2 : PHP 5.3 : LSB :
quot;staticquot;
}
class Voiture extends Vehicule {
  public static function a() {
    echo '<pre>' . __CLASS__ . '</pre>';} // Etape 3 : quot;Voiturequot;
}
Voiture::b();   // Etape 1
●
    Conservation de « self » et de son comportement
Nouveautés PHP 5.3 – Pascal MARTIN

              Appels statiques dynamiques
class A {
  public static function
methodeStatique($p1) {
                                         ●
                                             PHP <= 5.2
    echo
quot;<pre>A::methodeStatique($p1)</pre>quot;;
                                             ●
                                                 Parse Error
  }
  public function methode($p1) {
    echo quot;<pre>A::method($p1)</pre>quot;;
  }
}
$className = 'A';
                                         ●
                                             PHP 5.3
$methodName = 'methode';
$obj = new $className();
                                             ●
                                                 Appels statiques
$obj->$methodName('param1');                     dynamiques possibles
// A::methode(param1)
$staticMethodName = 'methodeStatique';
$className::
$staticMethodName('param1');
// A::methodeStatique(param1)
●
    A noter aussi
    ●
        Ajout méthode magique « __callStatic »
    ●
        Equivalent statique de « __call »
Nouveautés PHP 5.3 – Pascal MARTIN

                                    Syntaxe NOWDOC
●
    Depuis PHP 4, syntaxe Heredoc
$str = <<<END_OF_STRING
<h1>Hello, world!</h1>
<div>
    Démonstration syntaxe
    <strong>$syntaxe</strong>
</div>
END_OF_STRING;
●
    PHP 5.3 ajoute la syntaxe Nowdoc
    ●
        Simple-quotes : pas d'interpolation de variables
$str = <<<'END_OF_STRING'
<h1>Hello, world!</h1>
<div>
    Démonstration syntaxe
    <strong>$syntaxe</strong>
</div>
END_OF_STRING;
    ●
        Doubles-quotes : Identique à Heredoc
        –   Plus consistant avec Nowdoc simple-quotes
        –   Mais : deux façons de faire la même chose
Nouveautés PHP 5.3 – Pascal MARTIN


                     GC – Garbage Collector – 1
●
    PHP <= 5.2
    ●
        Références cycliques
    ●
        => non libération de la mémoire
●
    PHP 5.3 : Ajout Garbage Collector
    ●
        Fonctions « gc_* »
    ●
        Activé par défaut
        –   Mais désactivable
●
    Intérêt
    ●
        Faciliter le développement de grosses applications
        –   Batchs
        –   Applications basées sur des frameworks
        –   PHP-GTK ?
    ●
        PHP ne sert plus que pour du Web / des scripts légers
Nouveautés PHP 5.3 – Pascal MARTIN

                GC – Garbage Collector – 2
●
    Rouge : Sans Garbage Collector
●
    Bleu : Avec Garbage Collector
Nouveautés PHP 5.3 – Pascal MARTIN


                        Lambdas et Closures – 1
●
    Ceux qui ont fait du Javascript connaitront !
    ●
        PHP 5.3 introduit les « Lambdas » et « Closures »
●
    Fonction anonyme
    ●
        Création
$func = function () {
    echo quot;<p>Hello, World!</p>quot;;
};
    ●
        Appel
$func();
●
    Fonction anonyme avec paramètre(s)
$func = function ($param) {
    echo quot;<p>Hello, $param!</p>quot;;
};
$func('there');
●
    Appel possible via call_user_func[_array]
    ●
        Fonctions « anonymes », mais fonctions quand même !
Nouveautés PHP 5.3 – Pascal MARTIN


                         Lambdas et Closures – 2
●
    Exemple évident
    ●
        Utilisation d'une fonction anonyme comme fonction de
        callback
$data = array('sacré coeur', 'champs elysée', 'tour eiffel');
$output = array_map(function ($item) {
        return ucwords($item);
    }, $data);
var_dump($output);

array
  0 => string 'Sacré Coeur' (length=12)
  1 => string 'Champs Elysée' (length=14)
  2 => string 'Tour Eiffel' (length=11)

    ●
        Plus pratique que create_function !
        –   Plus rapide à l'exécution
        –   Plus lisible – coloration syntaxique !
    ●
        Évite la création de fonctions nommées, à usage
        unique
Nouveautés PHP 5.3 – Pascal MARTIN


                            Lambdas et Closures – 3
●
    « use » : Import d'une variable externe
$var = 'World';
$func1 = function () {
    echo quot;<p>Hello, $var!</p>quot;;
};
$func2 = function () use ($var) {
    echo quot;<p>Hello, $var!</p>quot;;
};

$func1();       // Notice: Undefined variable: var … => Hello, !
$func2();       // Hello, World!
●
    Import en lecture-seule
    ●
        Ou par référence : ré-utilisation de « & »
           –   Import en lecture-écriture
$func2 =   function () use (& $var) {
    echo   quot;<p>Début 2 : $var</p>quot;;
    $var   = 2;
    echo   quot;<p>Fin 2 : $var</p>quot;;
};
Nouveautés PHP 5.3 – Pascal MARTIN


                                      Lambdas et Closures – 4
●
    Création d'une closure
$func = function ($arg) {
    $compteur = $arg; // Copie privée, 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 $compteur
       ●
           C'est le principe même d'une closure !
             –   Après Javascript, c'est maintenant possible en PHP !
Nouveautés PHP 5.3 – Pascal MARTIN


                                      Lambdas et Closures – 5
●
    Même chose, en lecture-écriture
$func = function ($arg) {
    $compteur = $arg; // Copie privée, 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 conservée par la fonction interne
       ●
           $compteur importée par référence
       ●
           Accessible en lecture-écriture, donc
             –   Comme les closures de Javascript
Nouveautés 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
Nouveautés PHP 5.3 – Pascal MARTIN

                Intl – 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
coûtent {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 coûtent 3,14 €
Nouveautés 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 français / francophones
    ●
        Non, nos utilisateurs ne connaissent pas le format de
        dates américain !
Nouveautés PHP 5.3 – Pascal MARTIN

                                        Opérateur ? : revu
●
    Opérateur 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 résultat 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 défini)
$b = 'Hello, World!'; var_dump(isset($b) ?: 10); unset($b); // bool(true)
var_dump('' ?: isset($a)); // bool(false)   ($a non défini ; 2 valeurs fausses)
Nouveautés PHP 5.3 – Pascal MARTIN


                                                       mysqlnd
●
    Bibliothèque spécialisée d'interface PHP ↔ MySQL
    ●
        Conçue spécialement pour PHP ; intégrée à PHP
        –   Perspectives d'évolution
        –   MAJ / correctifs en même temps que PHP
●
    Principaux avantages
    ●
        Plus rapide (20 à 30% plus rapide que libmysql)
    ●
        Amélioration de l'utilisation mémoire
    ●
        Fonctionnalités supplémentaires (statistiques)
    ●
        Driver intégré : pas de dépendance externe
●
    Pour le développeur
    ●
        Aucune modification : choix effectué à la compilation
        de PHP
    ●
        Brique « en-dessous » de mysql, mysqli, PDO
Nouveautés PHP 5.3 – Pascal MARTIN


                                      Phar : PHP Archive
●
    « PHP Archive »
    ●
        Équivalent des .jar du monde JAVA
    ●
        Regroupement de plusieurs fichiers en un seul
    ●
        Intégré à PHP 5.3 : indépendant de PEAR / PECL
●
    Manipulation de fichiers Phar
    ●
        Ajout d'un stream « phar »
    ●
        Inclusion de fichiers packagés au sein d'une Phar
         –   Y compris d'un fichier vers l'autre
●
    Exemples de possibilités
    ●
        Distribution d'une application entière en un seul fichier
         –   Pour les application CLI, et pour les applications Web !
         –   Comme installeur ?
    ●
        Framework packagé en un seul fichier ?
Nouveautés PHP 5.3 – Pascal MARTIN

                                    Ajouts à la SPL – 1
●
    Itérateurs au niveau du système de fichiers
    ●
        FileSystemIterator, GlobIterator
$motif = __DIR__ . '/*.php';
$fichiers = new GlobIterator($motif);
foreach ($fichiers as $fichier) {
    // $fichier est une instance de SplFileInfo
    echo $fichier->getPathname() . ' : '
        . number_format($fichier->getSize(), 0, '.', ',')
        . quot; octetsnquot;;
}

/home/php/php53/spl/FilesystemIterator-5.3-1.php : 1,540 octets
/home/php/php53/spl/GlobIterator-5.3-1.php : 296 octets
/home/php/php53/spl/SplDoublyLinkedList-5.3-1.php : 138 octets
/home/php/php53/spl/SplMaxHeap-5.3-1.php : 179 octets
/home/php/php53/spl/SplMinHeap-5.3-1.php : 179 octets
/home/php/php53/spl/SplMinHeap-5.3-2.php : 494 octets
/home/php/php53/spl/SplMinHeap-5.3-3.php : 883 octets
/home/php/php53/spl/SplPriorityQueue-5.3-1.php : 301 octets
/home/php/php53/spl/SplQueue-5.3-1.php : 755 octets
/home/php/php53/spl/SplStack-5.3-1.php : 718 octets
Nouveautés PHP 5.3 – Pascal MARTIN

                                                 Ajouts à la SPL – 2
●
    Nouvelles structures de données
    ●
        SplStack, SplQueue, SplPriorityQueue,
        SplDoublyLinkedList, SplMinHeap, SplMaxHeap, …
    ●
        Attention : deux modes de fonctionnement différents
         –   Classes héritant de SplDoublyLinkedList ne se vident pas
             lors du parcours
         –   Classes héritant de SplHeap se vident lors du parcours
$q = new SplPriorityQueue();
$q->setExtractFlags(SplPriorityQueue::EXTR_BOTH);
$q->insert('Mr A', 10);
$q->insert('Mr B', 30);
$q->insert('Mr C', -1);
$q->insert('Mr D', 5);
foreach ($q as $element) {
  var_dump($element);   // /! le parcours enlève les éléments de la queue !
}
array   'data'   =>   string   'Mr   B'   (length=4)   'priority'   =>   int   30
array   'data'   =>   string   'Mr   A'   (length=4)   'priority'   =>   int   10
array   'data'   =>   string   'Mr   D'   (length=4)   'priority'   =>   int   5
array   'data'   =>   string   'Mr   C'   (length=4)   'priority'   =>   int   -1
Nouveautés PHP 5.3 – Pascal MARTIN


                                 Espaces de noms – 1
●
    Espaces de noms, « namespace »
    ●
        Fonctionnalité très attendue
    ●
        Grand sujet de débats / discussions enflammées
    ●
        Raison de l'alpha3 et des reports de sa sortie
●
    Pourquoi des namespaces ?
    ●
        Noms de classes trop longs
    ●
        Conflits
         –   Redéfinition de classes, de fonctions
         –   Dans les bibliothèques
●
    Séparateur de namespace : «  »
    ●
        ET PAS « :: » !
    ●
        Contrairement à ce qui existait en versions <= alpha2
Nouveautés PHP 5.3 – Pascal MARTIN

                                Espaces de noms – 2
●
    Déclaration d'un namespace
    ●
        Instruction « namespace » + nom de l'espace
    ●
        Tout ce qui suit, dans le fichier, est dans l'espace de
        noms
         –   Fonctions, constantes, classes
<?php
namespace LIB;
function a() {
    var_dump('LIBa');
}
function b() {
    var_dump('LIBb');
}
●
    Utilisation (autre fichier)
<?php
require_once(__DIR__ . '/lib.php');
LIBa();
LIBb();
Nouveautés PHP 5.3 – Pascal MARTIN

                                     Espaces de noms – 3
●
    Attention
    ●
        « namespace » : 1ère instruction d'un fichier !
         –   Sinon => Fatal Error
    ●
        «  » est aussi le caractère d'échappement
         –   Dans les chaînes de caractères
              ●
                  Entre double-quotes, surtout
              ●
                  Pour les instanciations dynamiques de classes
●
    Espaces de noms : contenu entre accolades
    ●
        C'est possible ;-)
<?php
namespace LIB {
    function a() {
        var_dump('LIBa');
    }
    function b() {
        var_dump('LIBb');
    }
}
Nouveautés PHP 5.3 – Pascal MARTIN

                                Espaces de noms – 4
●
    Organisation des fichiers
    ●
        Espace de noms sur plusieurs fichiers
        –   Frameworks, bibliothèques : plusieurs classes
    ●
        Plusieurs espaces de noms dans un même fichier
        –   Fusion de plusieurs fichiers PHP en un seul
●
    Noms composés
    ●
        «  » peut être inclus dans un nom de namespace
namespace MonNSA;
●
    Nouvelle constante magique
    ●   __NAMESPACE__
        –   Nom de l'espace de noms où elle est utilisée
        –   Chaîne vide en dehors de tout namespace
●
    Espace de noms « global » : «  »
Nouveautés PHP 5.3 – Pascal MARTIN

                               Espaces de noms – 5
●
    Import d'un espace de noms : « use … as … »
    ●
        Défini un alias
use NAMESPACE_AU_NOM_TRES_LONG as A;

$a = new AClassA();

$a = new NAMESPACE_AU_NOM_TRES_LONGClassA();

    ●
        Les deux écriture reviennent au même, en interne
    ●
        Même chose avec un NS au nom composé
    ●
        use peut aussi permettre de déclarer un alias de classe
use NSNOMCOMPOSEClassA as MyClass;

●
    NS en plusieurs parties : use sans as
use NSNOMCOMPOSE;
    ●
        Défini « COMPOSE » comme alias de « NSNOMCOMPOSE »
    ●
        Attention : uniquement si nom composé !
Nouveautés PHP 5.3 – Pascal MARTIN

                                Espaces de noms – 6
●
    Autoloading
    ●
        Nom de l'espace de noms est compris dans le nom
        interne de la classe
        –   Si fichiers bien organisés => pas de problème
●
    Type-hinting
●
    Résolution
    ●
        En premier, chargement depuis le NS courant
    ●
        Puis
        –   Pour les classes : autoload
        –   Pour les fonctions / constantes : chargement depuis
            l'espace de noms global
    ●
        Pas de chargement depuis l'espace de noms global
        pour les classes !
Nouveautés PHP 5.3 – Pascal MARTIN

                                                         Divers
●   getopt
    ●
       Support natif des options longues, sous tous OS
●   fileinfo
    ●
        Déterminer le type d'un fichier
●
    Configuration par répertoire, par fichier .ini
    ●
        En mode CGI uniquement
●
    Profiling XLST
●
    Nouvelles fonctions SSL
    ●
        Objectif : implémentation d'openId en PHP
●
    MAJ SQLite
●
    Plus de tests unitaires automatisés
●
    Corrections de bugs
Nouveautés PHP 5.3 – Pascal MARTIN

                                          Performances
●
    Nombreuses améliorations orientées performances
    ●
        Malgré les nouveautés
●
    Gain de 10 à 20% pour des applications
    « répandues »
    ●
        Drupal, TYPO3, Wordpress, ...
●
    Récapitulatif
    ●
        PHP 4
        –   Le plus lent
    ●
        PHP 5.3
        –   Plus rapide que
            toutes les autres
            versions 5.x
    ●
        PHP 6
        –   Par curiosité
Nouveautés PHP 5.3 – Pascal MARTIN


                 Conclusion : Le futur est là...
●
    Nouveautés et améliorations
    ●
        Plein
    ●
        Potentiellement intéressantes !
●
    Pas de révolution
    ●
        Pas / peu de cassage de fonctionnalités existantes
    ●
        Théoriquement, passage de 5.2.x à 5.3 peu risqué
         –   Testez, Expérimentez !
         –   Bonnes habitudes : à prendre !
         –   Mauvaises habitudes : pas encore là !
         –   Faites des retours : une des forces de PHP = communauté !
●
    Support par les IDE / outils
    ●
        Pas encore :-(
    ●
        Ou pas suffisamment...
Nouveautés PHP 5.3 – Pascal MARTIN

                                       … ou presque !
●
    Version alpha3 tout juste sortie
    ●
        Fonctionnalités figées
●
    Date pour la version finale ?
    ●
        Printemps 2009 ? Plus tard ?
    ●
        « Demandez à Lukas Smith » (conf. de 16h30)
●
    PHP 5.3 et projets « réels » ?
    ●
        Zend Framework 2.0 ? Doctrine 2.0 ?
    ●
        Et pour nos projets ?
    ●
        Et pour nos clients / pour vous ?
●
    PHP 5.et-demie ?
    ●
        PHP 6 n'est toujours pas pour demain...
    ●
        … Nombreuses améliorations rapportées en PHP 5.3 !
Nouveautés PHP 5.3 – Pascal MARTIN




Questions ?
Nouveautés PHP 5.3 – Pascal MARTIN




Merci à tous,

Bon appétit !

Más contenido relacionado

La actualidad más candente

PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3Eddy RICHARD
 
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEMarouan OMEZZINE
 
Formation PHP
Formation PHPFormation PHP
Formation PHPkemenaran
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5julien pauli
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7neuros
 
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
 
PHP 1 - Apprendre les bases
PHP 1 - Apprendre les basesPHP 1 - Apprendre les bases
PHP 1 - Apprendre les basesPierre Faure
 
PHP - get started
PHP - get startedPHP - get started
PHP - get startedmazenovi
 
Presentation langage go_19022015
Presentation langage go_19022015Presentation langage go_19022015
Presentation langage go_19022015Stéphane Legrand
 
Javascript Json artchitecture
Javascript  Json artchitecture Javascript  Json artchitecture
Javascript Json artchitecture zaghir
 
PHP #1 : introduction
PHP #1 : introductionPHP #1 : introduction
PHP #1 : introductionJean Michel
 
La référence Clear php
La référence Clear phpLa référence Clear php
La référence Clear phpDamien Seguy
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en gokader15
 
Structurer ses travaux SAS à l'aide de pages HTML, Joël Rivest
Structurer ses travaux SAS à l'aide de  pages HTML, Joël RivestStructurer ses travaux SAS à l'aide de  pages HTML, Joël Rivest
Structurer ses travaux SAS à l'aide de pages HTML, Joël Rivestsasreference
 

La actualidad más candente (20)

PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3
 
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
 
PHP5: Endgame
PHP5: EndgamePHP5: Endgame
PHP5: Endgame
 
Formation PHP
Formation PHPFormation PHP
Formation PHP
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7
 
Functions
FunctionsFunctions
Functions
 
Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?
 
PHP Training
PHP TrainingPHP Training
PHP Training
 
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]
 
PHP 1 - Apprendre les bases
PHP 1 - Apprendre les basesPHP 1 - Apprendre les bases
PHP 1 - Apprendre les bases
 
PHP - get started
PHP - get startedPHP - get started
PHP - get started
 
Presentation langage go_19022015
Presentation langage go_19022015Presentation langage go_19022015
Presentation langage go_19022015
 
Cours php
Cours phpCours php
Cours php
 
Plein phar !
Plein phar !Plein phar !
Plein phar !
 
Javascript Json artchitecture
Javascript  Json artchitecture Javascript  Json artchitecture
Javascript Json artchitecture
 
PHP #1 : introduction
PHP #1 : introductionPHP #1 : introduction
PHP #1 : introduction
 
La référence Clear php
La référence Clear phpLa référence Clear php
La référence Clear php
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en go
 
Structurer ses travaux SAS à l'aide de pages HTML, Joël Rivest
Structurer ses travaux SAS à l'aide de  pages HTML, Joël RivestStructurer ses travaux SAS à l'aide de  pages HTML, Joël Rivest
Structurer ses travaux SAS à l'aide de pages HTML, Joël Rivest
 

Similar a PHP 5.3 : les nouveautés du futur si proche

Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Dr Samir A. ROUABHI
 
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.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
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5halleck45
 
Tester les applications Zend Framework
Tester les applications Zend FrameworkTester les applications Zend Framework
Tester les applications Zend FrameworkMickael Perraud
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applicationsgoldoraf
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPJean-Marc Fontaine
 
Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Mickael Perraud
 
Top 10 chausse trappes
Top 10 chausse trappesTop 10 chausse trappes
Top 10 chausse trappesDamien Seguy
 
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
 
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
 
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearchParis Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearchMourad DACHRAOUI
 

Similar a PHP 5.3 : les nouveautés du futur si proche (20)

Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 
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 5.3
Php 5.3Php 5.3
Php 5.3
 
Playing With PHP 5.3
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3
 
Cours Php
Cours PhpCours Php
Cours Php
 
Cours Php
Cours PhpCours Php
Cours Php
 
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
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5
 
Spring 3.0
Spring 3.0Spring 3.0
Spring 3.0
 
Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
 
Cours php bac info
Cours php bac infoCours php bac info
Cours php bac info
 
Tester les applications Zend Framework
Tester les applications Zend FrameworkTester les applications Zend Framework
Tester les applications Zend Framework
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applications
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHP
 
Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?
 
Top 10 chausse trappes
Top 10 chausse trappesTop 10 chausse trappes
Top 10 chausse trappes
 
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
 
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
 
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearchParis Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
 

PHP 5.3 : les nouveautés du futur si proche

  • 1. Nouveautés PHP 5.3 – Pascal MARTIN « Que nous  réserve  l'avenir ? »
  • 2. Nouveautés PHP 5.3 – Pascal MARTIN Nouveautés de PHP 5.3 The future is here! – almost
  • 3. Nouveautés 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 série de 30 articles sur les Nouveautés de PHP 5.3
  • 4. Nouveautés PHP 5.3 – Pascal MARTIN Introduction ● Versions de PHP ● 4.4.9 : Août 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 : Décembre 2008 – bientôt 5.2.8 ? ● Grand nombre de nouveautés attendues ! ● Pas au point de changer de version majeure ? ● PHP 6 est encore loin ! ● PHP 5.3 ● Versions « testables » : printemps 2008 ● 1ère version alpha : 1er août 2008
  • 5. Nouveautés PHP 5.3 – Pascal MARTIN « Pack » d'exemples / tests ● Série d'exemples et de tests ● Couvrant la quasi-totalité des nouveautés de PHP 5.3 – Plus en détails que ce que je présenterai ici ● Téléchargeable 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. Nouveautés PHP 5.3 – Pascal MARTIN E_DEPRECATED ● Nouveau niveau de rapport d'erreurs ● « E_DEPRECATED » ● Objectif – Identifier les fonctionnalités dépréciées – Qui seront probablement supprimées pour une prochaine version ● Pour PHP 6, typiquement
  • 7. Nouveautés PHP 5.3 – Pascal MARTIN Constante magique __DIR__ ● Travail par rapport au répertoire 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'exécution ● PHP 5.3 : nouvelle constante magique ● __DIR__ require_once(__DIR__ . '/../mon-fichier.php'); ● Évalué à la compilation – Plus rapide à exécuter ● Et plus court à écrire
  • 8. Nouveautés PHP 5.3 – Pascal MARTIN Saut inconditionnel : « goto » ● Ajout de l'instruction « goto » ● Et de la notion de « label » (étiquette) echo '<p>a</p>'; goto c; echo '<p>b</p>'; c: echo '<p>c</p>'; ● A noter ● Pas de saut à l'intérieur d'une boucle / d'un switch ● Autorisé à l'intérieur d'un if / else (utilité ?) ● Pas de « goto $label; » ● Instructions « break » et « continue » non modifiées – Sortie de boucles imbriquées : « break 2; » – Pas de « break label; »
  • 9. Nouveautés PHP 5.3 – Pascal MARTIN LSB – Late Static Binding ● PHP 5.2 : résolution statique à la compilation class Vehicule { public static function a() { echo '<pre>' . __CLASS__ . '</pre>';} // 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 '<pre>' . __CLASS__ . '</pre>';} } Voiture::b(); // Etape 1 ● PHP 5.3 : résolution statique « tardive » class Vehicule { public static function a() {echo '<pre>' . __CLASS__ . '</pre>';} public static function b() {static::a();} // Etape 2 : PHP 5.3 : LSB : quot;staticquot; } class Voiture extends Vehicule { public static function a() { echo '<pre>' . __CLASS__ . '</pre>';} // Etape 3 : quot;Voiturequot; } Voiture::b(); // Etape 1 ● Conservation de « self » et de son comportement
  • 10. Nouveautés PHP 5.3 – Pascal MARTIN Appels statiques dynamiques class A { public static function methodeStatique($p1) { ● PHP <= 5.2 echo quot;<pre>A::methodeStatique($p1)</pre>quot;; ● Parse Error } public function methode($p1) { echo quot;<pre>A::method($p1)</pre>quot;; } } $className = 'A'; ● PHP 5.3 $methodName = 'methode'; $obj = new $className(); ● Appels statiques $obj->$methodName('param1'); dynamiques possibles // A::methode(param1) $staticMethodName = 'methodeStatique'; $className:: $staticMethodName('param1'); // A::methodeStatique(param1) ● A noter aussi ● Ajout méthode magique « __callStatic » ● Equivalent statique de « __call »
  • 11. Nouveautés PHP 5.3 – Pascal MARTIN Syntaxe NOWDOC ● Depuis PHP 4, syntaxe Heredoc $str = <<<END_OF_STRING <h1>Hello, world!</h1> <div> Démonstration syntaxe <strong>$syntaxe</strong> </div> END_OF_STRING; ● PHP 5.3 ajoute la syntaxe Nowdoc ● Simple-quotes : pas d'interpolation de variables $str = <<<'END_OF_STRING' <h1>Hello, world!</h1> <div> Démonstration syntaxe <strong>$syntaxe</strong> </div> END_OF_STRING; ● Doubles-quotes : Identique à Heredoc – Plus consistant avec Nowdoc simple-quotes – Mais : deux façons de faire la même chose
  • 12. Nouveautés PHP 5.3 – Pascal MARTIN GC – Garbage Collector – 1 ● PHP <= 5.2 ● Références cycliques ● => non libération de la mémoire ● PHP 5.3 : Ajout Garbage Collector ● Fonctions « gc_* » ● Activé par défaut – Mais désactivable ● Intérêt ● Faciliter le développement de grosses applications – Batchs – Applications basées sur des frameworks – PHP-GTK ? ● PHP ne sert plus que pour du Web / des scripts légers
  • 13. Nouveautés PHP 5.3 – Pascal MARTIN GC – Garbage Collector – 2 ● Rouge : Sans Garbage Collector ● Bleu : Avec Garbage Collector
  • 14. Nouveautés PHP 5.3 – Pascal MARTIN Lambdas et Closures – 1 ● Ceux qui ont fait du Javascript connaitront ! ● PHP 5.3 introduit les « Lambdas » et « Closures » ● Fonction anonyme ● Création $func = function () { echo quot;<p>Hello, World!</p>quot;; }; ● Appel $func(); ● Fonction anonyme avec paramètre(s) $func = function ($param) { echo quot;<p>Hello, $param!</p>quot;; }; $func('there'); ● Appel possible via call_user_func[_array] ● Fonctions « anonymes », mais fonctions quand même !
  • 15. Nouveautés PHP 5.3 – Pascal MARTIN Lambdas et Closures – 2 ● Exemple évident ● Utilisation d'une fonction anonyme comme fonction de callback $data = array('sacré coeur', 'champs elysée', 'tour eiffel'); $output = array_map(function ($item) { return ucwords($item); }, $data); var_dump($output); array 0 => string 'Sacré Coeur' (length=12) 1 => string 'Champs Elysée' (length=14) 2 => string 'Tour Eiffel' (length=11) ● Plus pratique que create_function ! – Plus rapide à l'exécution – Plus lisible – coloration syntaxique ! ● Évite la création de fonctions nommées, à usage unique
  • 16. Nouveautés PHP 5.3 – Pascal MARTIN Lambdas et Closures – 3 ● « use » : Import d'une variable externe $var = 'World'; $func1 = function () { echo quot;<p>Hello, $var!</p>quot;; }; $func2 = function () use ($var) { echo quot;<p>Hello, $var!</p>quot;; }; $func1(); // Notice: Undefined variable: var … => Hello, ! $func2(); // Hello, World! ● Import en lecture-seule ● Ou par référence : ré-utilisation de « & » – Import en lecture-écriture $func2 = function () use (& $var) { echo quot;<p>Début 2 : $var</p>quot;; $var = 2; echo quot;<p>Fin 2 : $var</p>quot;; };
  • 17. Nouveautés PHP 5.3 – Pascal MARTIN Lambdas et Closures – 4 ● Création d'une closure $func = function ($arg) { $compteur = $arg; // Copie privée, 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 $compteur ● C'est le principe même d'une closure ! – Après Javascript, c'est maintenant possible en PHP !
  • 18. Nouveautés PHP 5.3 – Pascal MARTIN Lambdas et Closures – 5 ● Même chose, en lecture-écriture $func = function ($arg) { $compteur = $arg; // Copie privée, 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 conservée par la fonction interne ● $compteur importée par référence ● Accessible en lecture-écriture, donc – Comme les closures de Javascript
  • 19. Nouveautés 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. Nouveautés PHP 5.3 – Pascal MARTIN Intl – 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 coûtent {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 coûtent 3,14 €
  • 21. Nouveautés 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 français / francophones ● Non, nos utilisateurs ne connaissent pas le format de dates américain !
  • 22. Nouveautés PHP 5.3 – Pascal MARTIN Opérateur ? : revu ● Opérateur 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 résultat 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 défini) $b = 'Hello, World!'; var_dump(isset($b) ?: 10); unset($b); // bool(true) var_dump('' ?: isset($a)); // bool(false) ($a non défini ; 2 valeurs fausses)
  • 23. Nouveautés PHP 5.3 – Pascal MARTIN mysqlnd ● Bibliothèque spécialisée d'interface PHP ↔ MySQL ● Conçue spécialement pour PHP ; intégrée à PHP – Perspectives d'évolution – MAJ / correctifs en même temps que PHP ● Principaux avantages ● Plus rapide (20 à 30% plus rapide que libmysql) ● Amélioration de l'utilisation mémoire ● Fonctionnalités supplémentaires (statistiques) ● Driver intégré : pas de dépendance externe ● Pour le développeur ● Aucune modification : choix effectué à la compilation de PHP ● Brique « en-dessous » de mysql, mysqli, PDO
  • 24. Nouveautés PHP 5.3 – Pascal MARTIN Phar : PHP Archive ● « PHP Archive » ● Équivalent des .jar du monde JAVA ● Regroupement de plusieurs fichiers en un seul ● Intégré à PHP 5.3 : indépendant de PEAR / PECL ● Manipulation de fichiers Phar ● Ajout d'un stream « phar » ● Inclusion de fichiers packagés au sein d'une Phar – Y compris d'un fichier vers l'autre ● Exemples de possibilités ● Distribution d'une application entière en un seul fichier – Pour les application CLI, et pour les applications Web ! – Comme installeur ? ● Framework packagé en un seul fichier ?
  • 25. Nouveautés PHP 5.3 – Pascal MARTIN Ajouts à la SPL – 1 ● Itérateurs au niveau du système de fichiers ● FileSystemIterator, GlobIterator $motif = __DIR__ . '/*.php'; $fichiers = new GlobIterator($motif); foreach ($fichiers as $fichier) { // $fichier est une instance de SplFileInfo echo $fichier->getPathname() . ' : ' . number_format($fichier->getSize(), 0, '.', ',') . quot; octetsnquot;; } /home/php/php53/spl/FilesystemIterator-5.3-1.php : 1,540 octets /home/php/php53/spl/GlobIterator-5.3-1.php : 296 octets /home/php/php53/spl/SplDoublyLinkedList-5.3-1.php : 138 octets /home/php/php53/spl/SplMaxHeap-5.3-1.php : 179 octets /home/php/php53/spl/SplMinHeap-5.3-1.php : 179 octets /home/php/php53/spl/SplMinHeap-5.3-2.php : 494 octets /home/php/php53/spl/SplMinHeap-5.3-3.php : 883 octets /home/php/php53/spl/SplPriorityQueue-5.3-1.php : 301 octets /home/php/php53/spl/SplQueue-5.3-1.php : 755 octets /home/php/php53/spl/SplStack-5.3-1.php : 718 octets
  • 26. Nouveautés PHP 5.3 – Pascal MARTIN Ajouts à la SPL – 2 ● Nouvelles structures de données ● SplStack, SplQueue, SplPriorityQueue, SplDoublyLinkedList, SplMinHeap, SplMaxHeap, … ● Attention : deux modes de fonctionnement différents – Classes héritant de SplDoublyLinkedList ne se vident pas lors du parcours – Classes héritant de SplHeap se vident lors du parcours $q = new SplPriorityQueue(); $q->setExtractFlags(SplPriorityQueue::EXTR_BOTH); $q->insert('Mr A', 10); $q->insert('Mr B', 30); $q->insert('Mr C', -1); $q->insert('Mr D', 5); foreach ($q as $element) { var_dump($element); // /! le parcours enlève les éléments de la queue ! } array 'data' => string 'Mr B' (length=4) 'priority' => int 30 array 'data' => string 'Mr A' (length=4) 'priority' => int 10 array 'data' => string 'Mr D' (length=4) 'priority' => int 5 array 'data' => string 'Mr C' (length=4) 'priority' => int -1
  • 27. Nouveautés PHP 5.3 – Pascal MARTIN Espaces de noms – 1 ● Espaces de noms, « namespace » ● Fonctionnalité très attendue ● Grand sujet de débats / discussions enflammées ● Raison de l'alpha3 et des reports de sa sortie ● Pourquoi des namespaces ? ● Noms de classes trop longs ● Conflits – Redéfinition de classes, de fonctions – Dans les bibliothèques ● Séparateur de namespace : « » ● ET PAS « :: » ! ● Contrairement à ce qui existait en versions <= alpha2
  • 28. Nouveautés PHP 5.3 – Pascal MARTIN Espaces de noms – 2 ● Déclaration d'un namespace ● Instruction « namespace » + nom de l'espace ● Tout ce qui suit, dans le fichier, est dans l'espace de noms – Fonctions, constantes, classes <?php namespace LIB; function a() { var_dump('LIBa'); } function b() { var_dump('LIBb'); } ● Utilisation (autre fichier) <?php require_once(__DIR__ . '/lib.php'); LIBa(); LIBb();
  • 29. Nouveautés PHP 5.3 – Pascal MARTIN Espaces de noms – 3 ● Attention ● « namespace » : 1ère instruction d'un fichier ! – Sinon => Fatal Error ● «  » est aussi le caractère d'échappement – Dans les chaînes de caractères ● Entre double-quotes, surtout ● Pour les instanciations dynamiques de classes ● Espaces de noms : contenu entre accolades ● C'est possible ;-) <?php namespace LIB { function a() { var_dump('LIBa'); } function b() { var_dump('LIBb'); } }
  • 30. Nouveautés PHP 5.3 – Pascal MARTIN Espaces de noms – 4 ● Organisation des fichiers ● Espace de noms sur plusieurs fichiers – Frameworks, bibliothèques : plusieurs classes ● Plusieurs espaces de noms dans un même fichier – Fusion de plusieurs fichiers PHP en un seul ● Noms composés ● « » peut être inclus dans un nom de namespace namespace MonNSA; ● Nouvelle constante magique ● __NAMESPACE__ – Nom de l'espace de noms où elle est utilisée – Chaîne vide en dehors de tout namespace ● Espace de noms « global » : «  »
  • 31. Nouveautés PHP 5.3 – Pascal MARTIN Espaces de noms – 5 ● Import d'un espace de noms : « use … as … » ● Défini un alias use NAMESPACE_AU_NOM_TRES_LONG as A; $a = new AClassA(); $a = new NAMESPACE_AU_NOM_TRES_LONGClassA(); ● Les deux écriture reviennent au même, en interne ● Même chose avec un NS au nom composé ● use peut aussi permettre de déclarer un alias de classe use NSNOMCOMPOSEClassA as MyClass; ● NS en plusieurs parties : use sans as use NSNOMCOMPOSE; ● Défini « COMPOSE » comme alias de « NSNOMCOMPOSE » ● Attention : uniquement si nom composé !
  • 32. Nouveautés PHP 5.3 – Pascal MARTIN Espaces de noms – 6 ● Autoloading ● Nom de l'espace de noms est compris dans le nom interne de la classe – Si fichiers bien organisés => pas de problème ● Type-hinting ● Résolution ● En premier, chargement depuis le NS courant ● Puis – Pour les classes : autoload – Pour les fonctions / constantes : chargement depuis l'espace de noms global ● Pas de chargement depuis l'espace de noms global pour les classes !
  • 33. Nouveautés PHP 5.3 – Pascal MARTIN Divers ● getopt ● Support natif des options longues, sous tous OS ● fileinfo ● Déterminer le type d'un fichier ● Configuration par répertoire, par fichier .ini ● En mode CGI uniquement ● Profiling XLST ● Nouvelles fonctions SSL ● Objectif : implémentation d'openId en PHP ● MAJ SQLite ● Plus de tests unitaires automatisés ● Corrections de bugs
  • 34. Nouveautés PHP 5.3 – Pascal MARTIN Performances ● Nombreuses améliorations orientées performances ● Malgré les nouveautés ● Gain de 10 à 20% pour des applications « répandues » ● Drupal, TYPO3, Wordpress, ... ● Récapitulatif ● PHP 4 – Le plus lent ● PHP 5.3 – Plus rapide que toutes les autres versions 5.x ● PHP 6 – Par curiosité
  • 35. Nouveautés PHP 5.3 – Pascal MARTIN Conclusion : Le futur est là... ● Nouveautés et améliorations ● Plein ● Potentiellement intéressantes ! ● Pas de révolution ● Pas / peu de cassage de fonctionnalités existantes ● Théoriquement, passage de 5.2.x à 5.3 peu risqué – Testez, Expérimentez ! – Bonnes habitudes : à prendre ! – Mauvaises habitudes : pas encore là ! – Faites des retours : une des forces de PHP = communauté ! ● Support par les IDE / outils ● Pas encore :-( ● Ou pas suffisamment...
  • 36. Nouveautés PHP 5.3 – Pascal MARTIN … ou presque ! ● Version alpha3 tout juste sortie ● Fonctionnalités figées ● Date pour la version finale ? ● Printemps 2009 ? Plus tard ? ● « Demandez à Lukas Smith » (conf. de 16h30) ● PHP 5.3 et projets « réels » ? ● Zend Framework 2.0 ? Doctrine 2.0 ? ● Et pour nos projets ? ● Et pour nos clients / pour vous ? ● PHP 5.et-demie ? ● PHP 6 n'est toujours pas pour demain... ● … Nombreuses améliorations rapportées en PHP 5.3 !
  • 37. Nouveautés PHP 5.3 – Pascal MARTIN Questions ?
  • 38. Nouveautés PHP 5.3 – Pascal MARTIN Merci à tous, Bon appétit !