SlideShare une entreprise Scribd logo
Intervenant:   Benoît DURAND             b.durand at epixelic dot com




                                                      PHP 5.3
                               Les namespaces, et les closures




05/10/2011                                              Développement
Les espaces de noms
            (namespaces)
La portée
1. Fonctions
2. Classes
3. Constantes




05/10/2011      PHP 5.3   3
La déclaration
Le mot clé est :
namespace

Le séparateur est :
         




05/10/2011            PHP 5.3   4
La déclaration
<?php
namespace Epx;

function number_format($number) {
  return number_format($number, 2, ',', ' ');
}

echo number_format(2); // Affiche 2,00

05/10/2011             PHP 5.3                   5
Les sous espaces de noms
Le séparateur d’espaces de noms permet de
définir un sous espace de nom :

namespace EpxPayment;




05/10/2011           PHP 5.3                6
L’ordre de résolution
1. Un nom qualifié

2. L’espace de nom courant

3. L’espace de nom global




05/10/2011           PHP 5.3   7
L’ordre de résolution
1. Un nom qualifié
                          ExceptionRuntimeException
2. L’espace de nom courant
                                   RuntimeException
3. L’espace de nom global
                                  RuntimeException




05/10/2011           PHP 5.3                       8
Utilisation des espaces de noms
// Fonction
echo number_format(2);     // Affiche 2
echo Epxnumber_format(2); // Affiche 2,00

// Classe
$e = new Exception('error');

// Constante
const APPLICATION_ENV = 'cli'; // Nouveauté 5.3
echo APPLICATION_ENV;          // Affiche cli

05/10/2011              PHP 5.3                   9
Import
Le mot clé est :

use




05/10/2011         PHP 5.3   10
Import
namespace Epx;

use ZendRegistry, // import de la classe
  ZendTranslator; // import de l’espace de nom

$r = new Registry;
$t = new TranslatorTranslator;


05/10/2011             PHP 5.3                11
Alias
Le mot clé est :
                             as




05/10/2011         PHP 5.3        12
Alias
namespace Application;
use ZendControllerAction as ActionController;

class IndexController extends ActionController {}




05/10/2011             PHP 5.3                  13
Vous êtes perdus ?
• Nouvelle constante magique
__NAMESPACE__




05/10/2011          PHP 5.3    14
Etude de cas
// Aujourd’hui, ZF1 est en style PHP 5.2
require_once 'Zend_Controller_Action';

class IndexController
   extends Zend_Controller_Action {}




05/10/2011             PHP 5.3             15
Etude de cas : migration d’une librairie
// Import du contrôleur ZF1
use Zend_Controller_Action as ActionController;
class IndexController extends ActionController {}

// Après la migration ZF2
use ZendControllerAction as ActionController;
class IndexController extends ActionController {}


05/10/2011             PHP 5.3                  16
Lisibilité du code
// Test sur un type d’objet
namespace ZendLog;
if ($writer instanceof Writer) {/*…*/}

// Type d’une classe
namespace ZendLogWriter;
use ZendLogWriter;
class Mail implements Writer {}

05/10/2011             PHP 5.3           17
Lisibilité du code
// Notation ZF1 compatible PHP 5.2
$vr = new Zend_Controller_Action_Helper_ViewRenderer;
Zend_Controller_Action_HelperBroker::addHelper($vr);

// Notation raccourcie
use ZendControllerActionHelperBroker,
    ZendControllerActionHelperViewRenderer;
HelperBroker::addHelper(new ViewRenderer);




05/10/2011                PHP 5.3                       18
PSR-0 : PHP Specification Request 0
• Interopérabilité pour l’autoload entre les
  frameworks
• Zend Framework 2, Doctrine2, Symfony2 l’ont
  déjà adopté




05/10/2011           PHP 5.3                    19
PSR-0 : exemples
• ZendMailMessage
=> /vendor/Zend/Mail/Message.php
• DoctrineORMEntityManager
=> /vendor/Doctrine/ORM/EntityManager.php
• SymfonyComponentYamlParser
=> /vendor/Symfony/Component/Yaml/Parser.php




05/10/2011            PHP 5.3                  20
Résumons
• Améliorer la lecture avec des noms courts




05/10/2011            PHP 5.3                 21
Résumons
• Améliorer la lecture avec des noms courts
• Refactoriser devient simple




05/10/2011            PHP 5.3                 22
Résumons
• Améliorer la lecture avec des noms courts
• Refactoriser devient simple
• Chaque classe définit un espace de nom




05/10/2011            PHP 5.3                 23
Résumons
•   Améliorer la lecture avec des noms courts
•   Refactoriser devient simple
•   Chaque classe définit un espace de nom
•   Un espace de nom par fichier




05/10/2011              PHP 5.3                 24
Résumons
•   Améliorer la lecture avec des noms courts
•   Refactoriser devient simple
•   Chaque classe définit un espace de nom
•   Un espace de nom par fichier
•   Utiliser un espace de nom unique




05/10/2011              PHP 5.3                 25
Résumons
•   Améliorer la lecture avec des noms courts
•   Refactoriser devient simple
•   Chaque classe définit un espace de nom
•   Un espace de nom par fichier
•   Utiliser un espace de nom unique
•   Utiliser l’import au lieu de require_once




05/10/2011              PHP 5.3                 26
Résumons
•   Améliorer la lecture avec des noms courts
•   Refactoriser devient simple
•   Chaque classe définit un espace de nom
•   Un espace de nom par fichier
•   Utiliser un espace de nom unique
•   Utiliser l’import au lieu de require_once
•   Eviter d’utiliser la résolution globale (sauf
    pour les chaînes de caractères)

05/10/2011                PHP 5.3                   27
Les fonctions anonymes
                 (closures)
Fonctions anonymes
// PHP 5.2
$pages = array(…);
$cmp_function = create_function(
   '$a,$b',
   'return strcmp($a["label"], $b["label"]); '
);
usort($pages, $cmp_function);
var_dump($pages);

05/10/2011              PHP 5.3                  29
Fonctions de rappel (callback)
$pages = array(
    array('label' => 'home'),
    array('label' => 'about'),
);
// C’est plus rapide que create_function()
usort($pages, function ($a, $b) {
    return strcmp($a['label'], $b['label']);
});

05/10/2011              PHP 5.3                30
Contexte et variables
$logger = new Logger;
$log = function ($msg) use ($logger) {
   if (is_array($msg)) {
      $msg = json_encode($msg);
   }
   $logger->crit((string) $msg);
};
$log('il neige');

05/10/2011             PHP 5.3           31
Bonus
Amélioration des performances
• Drupal : 20% plus rapide
• Wordpress : 15% plus rapide




source : http://news.php.net/php.internals/36484

05/10/2011                                 PHP 5.3   33
Nouvelle méthode magique
namespace MyFilter;
class Int
{
   public function __invoke($value)
   {
     return filter_var($value, FILTER_SANITIZE_NUMBER_INT);
   }
}
$filter = new Int;
var_dump($filter('CL1234')); // Affiche 1234


05/10/2011                  PHP 5.3                       34
Les limitations du mot clé self
namespace CwpBoutique;
class Commande
{
   public static function get($id)
   {
     return new self;
   }
}

use CwpBoutiqueEvolutionCommande;
$cl = get_class(Commande::get(42));
var_dump($cl); // Affiche CwpBoutiqueCommande
05/10/2011                   PHP 5.3              35
Late State Binding
Le mot clé est :




                   static




05/10/2011                  PHP 5.3   36
Late State Binding
namespace CwpBoutique;
class Commande
{
   public static function get($id)
   {
     return new static;
   }
}

use CwpBoutiqueEvolutionCommande;
$cl = get_class(Commande::get(42));
var_dump($cl); // Affiche CwpBoutiqueEvolutionCommande


05/10/2011                     PHP 5.3                 37
Autres nouveautés
• Nouvelle constante magique
__DIR__ === dirname(__FILE__)




05/10/2011          PHP 5.3     38
Autres nouveautés
• Nouvelle constante magique
__DIR__ === dirname(__FILE__)
• Nouvelle méthode magique
__callStatic()




05/10/2011          PHP 5.3     39
Autres nouveautés
• Nouvelle constante magique
__DIR__ === dirname(__FILE__)
• Nouvelle méthode magique
__callStatic()
• Phar (archive PHP)




05/10/2011          PHP 5.3     40
Autres nouveautés
• Nouvelle constante magique
__DIR__ === dirname(__FILE__)
• Nouvelle méthode magique
__callStatic()
• Phar (archive PHP)
• Ajout de NOWDOC




05/10/2011          PHP 5.3     41
Autres nouveautés
• Nouvelle constante magique
__DIR__ === dirname(__FILE__)
• Nouvelle méthode magique
__callStatic()
• Phar (archive PHP)
• Ajout de NOWDOC
• Ajout d’un garbage collector


05/10/2011           PHP 5.3     42
Autres nouveautés
• Nouvelle constante magique
__DIR__ === dirname(__FILE__)
• Nouvelle méthode magique
__callStatic()
• Phar (archive PHP)
• Ajout de NOWDOC
• Ajout d’un garbage collector
• Support amélioré pour Windows

05/10/2011          PHP 5.3       43
Documentation
• http://php.net/namespace
• http://tinyurl.com/fig-psr0
• http://php.net/manual/fr/functions.anonymous.php
• http://php.net/manual/fr/language.oop5.late-static-
  bindings.php
• http://php.net/manual/fr/migration53.new-features.php




11/04/2011                 Git                        44
Questions ?




05/10/2011       PHP 5.3   45

Contenu connexe

PPTX
Zend Framework 2
epixelic
 
PDF
Communications Réseaux et HTTP avec PHP
julien pauli
 
PPTX
Introduction à Symfony
Abdoulaye Dieng
 
PDF
PHPTour 2011 - PHP5.4
julien pauli
 
ODP
ZendFramework2 - Présentation
julien pauli
 
PDF
Nouveautés php 7
Cyrille Grandval
 
PPT
Java Database Connectivity
Korteby Farouk
 
PPTX
Introduction à JavaScript
Abdoulaye Dieng
 
Zend Framework 2
epixelic
 
Communications Réseaux et HTTP avec PHP
julien pauli
 
Introduction à Symfony
Abdoulaye Dieng
 
PHPTour 2011 - PHP5.4
julien pauli
 
ZendFramework2 - Présentation
julien pauli
 
Nouveautés php 7
Cyrille Grandval
 
Java Database Connectivity
Korteby Farouk
 
Introduction à JavaScript
Abdoulaye Dieng
 

Tendances (20)

PDF
Javascript ne se limite pas à jquery
neuros
 
PPT
.php1 : les fondamentaux du PHP
Abdoulaye Dieng
 
PPTX
Csharp1 : quelques elements de base
Abdoulaye Dieng
 
PDF
Cours php
Narûtö Bàl'Sèm
 
PPTX
Introduction à Python
Abdoulaye Dieng
 
PPTX
cpp1 : Quelques elements de base du C++
Abdoulaye Dieng
 
PDF
Playing With PHP 5.3
Fabien Potencier
 
PPTX
Initiation à l'algorithmique
Abdoulaye Dieng
 
PPTX
Requêtes HTTP synchrones et asynchrones
Abdoulaye Dieng
 
PPTX
Hibernate jpa
Lhouceine OUHAMZA
 
PPTX
Introduction à Laravel
Abdoulaye Dieng
 
PDF
"Input/Ouput, 16 ans après" à Devoxx France 2012
Jean-Michel Doudoux
 
PPTX
Symfony2 - Un Framework PHP 5 Performant
Hugo Hamon
 
PDF
Développement informatique : Gestion de projet, versioning, debugging, testin...
ECAM Brussels Engineering School
 
PDF
Retours sur java 8 devoxx fr 2016
Jean-Michel Doudoux
 
PPT
Introduction à JavaScript
Abdoulaye Dieng
 
PDF
Développement informatique : Programmation fonctionnelle, décorateur et génér...
ECAM Brussels Engineering School
 
PPTX
Introduction à React JS
Abdoulaye Dieng
 
PPTX
Change mind about JS
Damien Simonin Feugas
 
PPTX
php2 : formulaire-session-PDO
Abdoulaye Dieng
 
Javascript ne se limite pas à jquery
neuros
 
.php1 : les fondamentaux du PHP
Abdoulaye Dieng
 
Csharp1 : quelques elements de base
Abdoulaye Dieng
 
Introduction à Python
Abdoulaye Dieng
 
cpp1 : Quelques elements de base du C++
Abdoulaye Dieng
 
Playing With PHP 5.3
Fabien Potencier
 
Initiation à l'algorithmique
Abdoulaye Dieng
 
Requêtes HTTP synchrones et asynchrones
Abdoulaye Dieng
 
Hibernate jpa
Lhouceine OUHAMZA
 
Introduction à Laravel
Abdoulaye Dieng
 
"Input/Ouput, 16 ans après" à Devoxx France 2012
Jean-Michel Doudoux
 
Symfony2 - Un Framework PHP 5 Performant
Hugo Hamon
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
ECAM Brussels Engineering School
 
Retours sur java 8 devoxx fr 2016
Jean-Michel Doudoux
 
Introduction à JavaScript
Abdoulaye Dieng
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
ECAM Brussels Engineering School
 
Introduction à React JS
Abdoulaye Dieng
 
Change mind about JS
Damien Simonin Feugas
 
php2 : formulaire-session-PDO
Abdoulaye Dieng
 
Publicité

En vedette (20)

PDF
S2 ecogest-m2-13
essa1988
 
PDF
PHP 5 pour les développeurs Java
Mehdi EL KRARI
 
PPT
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Marouan OMEZZINE
 
PPTX
Présentation symfony epita
Noel GUILBERT
 
PDF
Php
krymo
 
PDF
Introduction à Laravel 4 @Dogstudio
Nicolas Widart
 
PPT
PHP 5.3, PHP Next
SQLI
 
PPT
Symfony 2 : chapitre 2 - Les vues en Twig
Abdelkader Rhouati
 
PPT
Symfony 2 : chapitre 4 - Les services et les formulaires
Abdelkader Rhouati
 
PPT
Symfony 2 : chapitre 3 - Les modèles en Doctrine 2
Abdelkader Rhouati
 
PPTX
Symfony 2 : chapitre 1 - Présentation Générale
Abdelkader Rhouati
 
PDF
Application web php5 html5 css3 bootstrap
Bassem ABCHA
 
PDF
Dot Zsuriken 2009 par autoprestige-tuning.fr
autoprestige
 
PDF
(LP2) Tópico 00 - Apresentação da Disciplina
Fabricio Narcizo
 
PPSX
Meet the DOT Doctor (Personal side)
The DOT Doctor
 
PPT
Point supply
Mehdi Lahlou
 
PPTX
Institucional: DOT digital group
DOT digital group
 
PPT
Les Herbes De Provence Au Canal2
Fehl
 
PPT
Aplicaciones móviles para ambientes descentralizados
vladimir calderon
 
S2 ecogest-m2-13
essa1988
 
PHP 5 pour les développeurs Java
Mehdi EL KRARI
 
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Marouan OMEZZINE
 
Présentation symfony epita
Noel GUILBERT
 
Php
krymo
 
Introduction à Laravel 4 @Dogstudio
Nicolas Widart
 
PHP 5.3, PHP Next
SQLI
 
Symfony 2 : chapitre 2 - Les vues en Twig
Abdelkader Rhouati
 
Symfony 2 : chapitre 4 - Les services et les formulaires
Abdelkader Rhouati
 
Symfony 2 : chapitre 3 - Les modèles en Doctrine 2
Abdelkader Rhouati
 
Symfony 2 : chapitre 1 - Présentation Générale
Abdelkader Rhouati
 
Application web php5 html5 css3 bootstrap
Bassem ABCHA
 
Dot Zsuriken 2009 par autoprestige-tuning.fr
autoprestige
 
(LP2) Tópico 00 - Apresentação da Disciplina
Fabricio Narcizo
 
Meet the DOT Doctor (Personal side)
The DOT Doctor
 
Point supply
Mehdi Lahlou
 
Institucional: DOT digital group
DOT digital group
 
Les Herbes De Provence Au Canal2
Fehl
 
Aplicaciones móviles para ambientes descentralizados
vladimir calderon
 
Publicité

Similaire à Php 5.3 (20)

PDF
PHP 5.3 : les nouveautés du futur si proche
Pascal MARTIN
 
ODP
Migration PHP4-PHP5
julien pauli
 
ODP
Présentation de PHP 5.4 [FR]
Wixiweb
 
KEY
Exploiter php 5
halleck45
 
PPTX
Initiation au langage PHP
Faouzia Benabbou
 
PDF
La référence Clear php
Damien Seguy
 
PDF
Chapitre5_Cours_TechProgWeb_LI2 mr Malek .pdf
faroukmabrouk999
 
KEY
Audits php
Damien Seguy
 
ODP
Patterns and OOP in PHP
julien pauli
 
PPTX
S2-01-PHP.pptx
kohay75604
 
PPT
PHP5 et Zend Framework
Ndjido Ardo BAR
 
PDF
Bonnes pratiques de developpement en PHP
Pascal MARTIN
 
PPT
Cours php
csskaled
 
PDF
Programmation orientée objet en PHP 5
Kristen Le Liboux
 
PDF
Objets patterns et genie logiciel , par Julien Pauli
ALTER WAY
 
PPTX
PHP.pptx
GroupeExcelMarrakech
 
PDF
Développement Web- PHP (partie I).pdf
YasushiTsubakik
 
PPTX
PHP5: Endgame
Romain Cambien
 
PPT
PHP - get started
mazenovi
 
PDF
chapitre 4-PHP5 module web part2 (1).pdf
imaneeaouattahee
 
PHP 5.3 : les nouveautés du futur si proche
Pascal MARTIN
 
Migration PHP4-PHP5
julien pauli
 
Présentation de PHP 5.4 [FR]
Wixiweb
 
Exploiter php 5
halleck45
 
Initiation au langage PHP
Faouzia Benabbou
 
La référence Clear php
Damien Seguy
 
Chapitre5_Cours_TechProgWeb_LI2 mr Malek .pdf
faroukmabrouk999
 
Audits php
Damien Seguy
 
Patterns and OOP in PHP
julien pauli
 
S2-01-PHP.pptx
kohay75604
 
PHP5 et Zend Framework
Ndjido Ardo BAR
 
Bonnes pratiques de developpement en PHP
Pascal MARTIN
 
Cours php
csskaled
 
Programmation orientée objet en PHP 5
Kristen Le Liboux
 
Objets patterns et genie logiciel , par Julien Pauli
ALTER WAY
 
Développement Web- PHP (partie I).pdf
YasushiTsubakik
 
PHP5: Endgame
Romain Cambien
 
PHP - get started
mazenovi
 
chapitre 4-PHP5 module web part2 (1).pdf
imaneeaouattahee
 

Dernier (12)

PDF
Rapport de Stage Fin D’étude - Développement Web et Multimédia
YassineMyara
 
PDF
linkyfi presentation et ses fonctionnalité
ZakariaRAHOUI2
 
PDF
Circuit Breaker pattern avec Resilience4j
SOUFIANE MOUHTARAM
 
PDF
Présentation UCOPIA et ses fonctionnalités
ZakariaRAHOUI2
 
PDF
CHAPITRE1_Architecture du Serveur Oracle.pdf
houcemswissi1
 
PDF
Google Remote Procedure Call Web Service
SOUFIANE MOUHTARAM
 
PDF
CHAPITRE 5_Déplacement des données DBA.pdf
houcemswissi1
 
PPTX
voip architecture et installation de solution voip
samiraelazouzy
 
PDF
Communication entre les conteneurs docker dans diff réseaux
SOUFIANE MOUHTARAM
 
PPTX
Soutanece Stage Pfe Développement Web et Multimédia
YassineMyara
 
PDF
Katalog VRF Clivet vrf technology(1).pdf
MehfoozAli19
 
PDF
Généralités sur balisage (Tagging) en git
SOUFIANE MOUHTARAM
 
Rapport de Stage Fin D’étude - Développement Web et Multimédia
YassineMyara
 
linkyfi presentation et ses fonctionnalité
ZakariaRAHOUI2
 
Circuit Breaker pattern avec Resilience4j
SOUFIANE MOUHTARAM
 
Présentation UCOPIA et ses fonctionnalités
ZakariaRAHOUI2
 
CHAPITRE1_Architecture du Serveur Oracle.pdf
houcemswissi1
 
Google Remote Procedure Call Web Service
SOUFIANE MOUHTARAM
 
CHAPITRE 5_Déplacement des données DBA.pdf
houcemswissi1
 
voip architecture et installation de solution voip
samiraelazouzy
 
Communication entre les conteneurs docker dans diff réseaux
SOUFIANE MOUHTARAM
 
Soutanece Stage Pfe Développement Web et Multimédia
YassineMyara
 
Katalog VRF Clivet vrf technology(1).pdf
MehfoozAli19
 
Généralités sur balisage (Tagging) en git
SOUFIANE MOUHTARAM
 

Php 5.3

  • 1. Intervenant: Benoît DURAND b.durand at epixelic dot com PHP 5.3 Les namespaces, et les closures 05/10/2011 Développement
  • 2. Les espaces de noms (namespaces)
  • 3. La portée 1. Fonctions 2. Classes 3. Constantes 05/10/2011 PHP 5.3 3
  • 4. La déclaration Le mot clé est : namespace Le séparateur est : 05/10/2011 PHP 5.3 4
  • 5. La déclaration <?php namespace Epx; function number_format($number) { return number_format($number, 2, ',', ' '); } echo number_format(2); // Affiche 2,00 05/10/2011 PHP 5.3 5
  • 6. Les sous espaces de noms Le séparateur d’espaces de noms permet de définir un sous espace de nom : namespace EpxPayment; 05/10/2011 PHP 5.3 6
  • 7. L’ordre de résolution 1. Un nom qualifié 2. L’espace de nom courant 3. L’espace de nom global 05/10/2011 PHP 5.3 7
  • 8. L’ordre de résolution 1. Un nom qualifié ExceptionRuntimeException 2. L’espace de nom courant RuntimeException 3. L’espace de nom global RuntimeException 05/10/2011 PHP 5.3 8
  • 9. Utilisation des espaces de noms // Fonction echo number_format(2); // Affiche 2 echo Epxnumber_format(2); // Affiche 2,00 // Classe $e = new Exception('error'); // Constante const APPLICATION_ENV = 'cli'; // Nouveauté 5.3 echo APPLICATION_ENV; // Affiche cli 05/10/2011 PHP 5.3 9
  • 10. Import Le mot clé est : use 05/10/2011 PHP 5.3 10
  • 11. Import namespace Epx; use ZendRegistry, // import de la classe ZendTranslator; // import de l’espace de nom $r = new Registry; $t = new TranslatorTranslator; 05/10/2011 PHP 5.3 11
  • 12. Alias Le mot clé est : as 05/10/2011 PHP 5.3 12
  • 13. Alias namespace Application; use ZendControllerAction as ActionController; class IndexController extends ActionController {} 05/10/2011 PHP 5.3 13
  • 14. Vous êtes perdus ? • Nouvelle constante magique __NAMESPACE__ 05/10/2011 PHP 5.3 14
  • 15. Etude de cas // Aujourd’hui, ZF1 est en style PHP 5.2 require_once 'Zend_Controller_Action'; class IndexController extends Zend_Controller_Action {} 05/10/2011 PHP 5.3 15
  • 16. Etude de cas : migration d’une librairie // Import du contrôleur ZF1 use Zend_Controller_Action as ActionController; class IndexController extends ActionController {} // Après la migration ZF2 use ZendControllerAction as ActionController; class IndexController extends ActionController {} 05/10/2011 PHP 5.3 16
  • 17. Lisibilité du code // Test sur un type d’objet namespace ZendLog; if ($writer instanceof Writer) {/*…*/} // Type d’une classe namespace ZendLogWriter; use ZendLogWriter; class Mail implements Writer {} 05/10/2011 PHP 5.3 17
  • 18. Lisibilité du code // Notation ZF1 compatible PHP 5.2 $vr = new Zend_Controller_Action_Helper_ViewRenderer; Zend_Controller_Action_HelperBroker::addHelper($vr); // Notation raccourcie use ZendControllerActionHelperBroker, ZendControllerActionHelperViewRenderer; HelperBroker::addHelper(new ViewRenderer); 05/10/2011 PHP 5.3 18
  • 19. PSR-0 : PHP Specification Request 0 • Interopérabilité pour l’autoload entre les frameworks • Zend Framework 2, Doctrine2, Symfony2 l’ont déjà adopté 05/10/2011 PHP 5.3 19
  • 20. PSR-0 : exemples • ZendMailMessage => /vendor/Zend/Mail/Message.php • DoctrineORMEntityManager => /vendor/Doctrine/ORM/EntityManager.php • SymfonyComponentYamlParser => /vendor/Symfony/Component/Yaml/Parser.php 05/10/2011 PHP 5.3 20
  • 21. Résumons • Améliorer la lecture avec des noms courts 05/10/2011 PHP 5.3 21
  • 22. Résumons • Améliorer la lecture avec des noms courts • Refactoriser devient simple 05/10/2011 PHP 5.3 22
  • 23. Résumons • Améliorer la lecture avec des noms courts • Refactoriser devient simple • Chaque classe définit un espace de nom 05/10/2011 PHP 5.3 23
  • 24. Résumons • Améliorer la lecture avec des noms courts • Refactoriser devient simple • Chaque classe définit un espace de nom • Un espace de nom par fichier 05/10/2011 PHP 5.3 24
  • 25. Résumons • Améliorer la lecture avec des noms courts • Refactoriser devient simple • Chaque classe définit un espace de nom • Un espace de nom par fichier • Utiliser un espace de nom unique 05/10/2011 PHP 5.3 25
  • 26. Résumons • Améliorer la lecture avec des noms courts • Refactoriser devient simple • Chaque classe définit un espace de nom • Un espace de nom par fichier • Utiliser un espace de nom unique • Utiliser l’import au lieu de require_once 05/10/2011 PHP 5.3 26
  • 27. Résumons • Améliorer la lecture avec des noms courts • Refactoriser devient simple • Chaque classe définit un espace de nom • Un espace de nom par fichier • Utiliser un espace de nom unique • Utiliser l’import au lieu de require_once • Eviter d’utiliser la résolution globale (sauf pour les chaînes de caractères) 05/10/2011 PHP 5.3 27
  • 29. Fonctions anonymes // PHP 5.2 $pages = array(…); $cmp_function = create_function( '$a,$b', 'return strcmp($a["label"], $b["label"]); ' ); usort($pages, $cmp_function); var_dump($pages); 05/10/2011 PHP 5.3 29
  • 30. Fonctions de rappel (callback) $pages = array( array('label' => 'home'), array('label' => 'about'), ); // C’est plus rapide que create_function() usort($pages, function ($a, $b) { return strcmp($a['label'], $b['label']); }); 05/10/2011 PHP 5.3 30
  • 31. Contexte et variables $logger = new Logger; $log = function ($msg) use ($logger) { if (is_array($msg)) { $msg = json_encode($msg); } $logger->crit((string) $msg); }; $log('il neige'); 05/10/2011 PHP 5.3 31
  • 32. Bonus
  • 33. Amélioration des performances • Drupal : 20% plus rapide • Wordpress : 15% plus rapide source : http://news.php.net/php.internals/36484 05/10/2011 PHP 5.3 33
  • 34. Nouvelle méthode magique namespace MyFilter; class Int { public function __invoke($value) { return filter_var($value, FILTER_SANITIZE_NUMBER_INT); } } $filter = new Int; var_dump($filter('CL1234')); // Affiche 1234 05/10/2011 PHP 5.3 34
  • 35. Les limitations du mot clé self namespace CwpBoutique; class Commande { public static function get($id) { return new self; } } use CwpBoutiqueEvolutionCommande; $cl = get_class(Commande::get(42)); var_dump($cl); // Affiche CwpBoutiqueCommande 05/10/2011 PHP 5.3 35
  • 36. Late State Binding Le mot clé est : static 05/10/2011 PHP 5.3 36
  • 37. Late State Binding namespace CwpBoutique; class Commande { public static function get($id) { return new static; } } use CwpBoutiqueEvolutionCommande; $cl = get_class(Commande::get(42)); var_dump($cl); // Affiche CwpBoutiqueEvolutionCommande 05/10/2011 PHP 5.3 37
  • 38. Autres nouveautés • Nouvelle constante magique __DIR__ === dirname(__FILE__) 05/10/2011 PHP 5.3 38
  • 39. Autres nouveautés • Nouvelle constante magique __DIR__ === dirname(__FILE__) • Nouvelle méthode magique __callStatic() 05/10/2011 PHP 5.3 39
  • 40. Autres nouveautés • Nouvelle constante magique __DIR__ === dirname(__FILE__) • Nouvelle méthode magique __callStatic() • Phar (archive PHP) 05/10/2011 PHP 5.3 40
  • 41. Autres nouveautés • Nouvelle constante magique __DIR__ === dirname(__FILE__) • Nouvelle méthode magique __callStatic() • Phar (archive PHP) • Ajout de NOWDOC 05/10/2011 PHP 5.3 41
  • 42. Autres nouveautés • Nouvelle constante magique __DIR__ === dirname(__FILE__) • Nouvelle méthode magique __callStatic() • Phar (archive PHP) • Ajout de NOWDOC • Ajout d’un garbage collector 05/10/2011 PHP 5.3 42
  • 43. Autres nouveautés • Nouvelle constante magique __DIR__ === dirname(__FILE__) • Nouvelle méthode magique __callStatic() • Phar (archive PHP) • Ajout de NOWDOC • Ajout d’un garbage collector • Support amélioré pour Windows 05/10/2011 PHP 5.3 43
  • 44. Documentation • http://php.net/namespace • http://tinyurl.com/fig-psr0 • http://php.net/manual/fr/functions.anonymous.php • http://php.net/manual/fr/language.oop5.late-static- bindings.php • http://php.net/manual/fr/migration53.new-features.php 11/04/2011 Git 44