SlideShare una empresa de Scribd logo
1 de 45
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

Más contenido relacionado

La actualidad más candente

Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryneuros
 
.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHPAbdoulaye Dieng
 
Csharp1 : quelques elements de base
Csharp1 :  quelques elements de baseCsharp1 :  quelques elements de base
Csharp1 : quelques elements de baseAbdoulaye Dieng
 
cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++Abdoulaye Dieng
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmiqueAbdoulaye Dieng
 
Requêtes HTTP synchrones et asynchrones
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchronesAbdoulaye Dieng
 
"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012Jean-Michel Doudoux
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...ECAM Brussels Engineering School
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Jean-Michel Doudoux
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptAbdoulaye Dieng
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...ECAM Brussels Engineering School
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JSAbdoulaye Dieng
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
 

La actualidad más candente (20)

Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 
.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP
 
Csharp1 : quelques elements de base
Csharp1 :  quelques elements de baseCsharp1 :  quelques elements de base
Csharp1 : quelques elements de base
 
Cours php
Cours phpCours php
Cours php
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++
 
Playing With PHP 5.3
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
Requêtes HTTP synchrones et asynchrones
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchrones
 
Hibernate jpa
Hibernate jpaHibernate jpa
Hibernate jpa
 
Introduction à Laravel
Introduction à LaravelIntroduction à Laravel
Introduction à Laravel
 
"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JS
 
Change mind about JS
Change mind about JSChange mind about JS
Change mind about JS
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 

Destacado

S2 ecogest-m2-13
S2 ecogest-m2-13S2 ecogest-m2-13
S2 ecogest-m2-13essa1988
 
PHP 5 pour les développeurs Java
PHP 5 pour les développeurs JavaPHP 5 pour les développeurs Java
PHP 5 pour les développeurs JavaMehdi EL KRARI
 
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
 
Présentation symfony epita
Présentation symfony epitaPrésentation symfony epita
Présentation symfony epitaNoel GUILBERT
 
Introduction à Laravel 4 @Dogstudio
Introduction à Laravel 4 @DogstudioIntroduction à Laravel 4 @Dogstudio
Introduction à Laravel 4 @DogstudioNicolas Widart
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP NextSQLI
 
Symfony 2 : chapitre 2 - Les vues en Twig
Symfony 2 : chapitre 2 - Les vues en TwigSymfony 2 : chapitre 2 - Les vues en Twig
Symfony 2 : chapitre 2 - Les vues en TwigAbdelkader Rhouati
 
Symfony 2 : chapitre 4 - Les services et les formulaires
Symfony 2 : chapitre 4 - Les services et les formulairesSymfony 2 : chapitre 4 - Les services et les formulaires
Symfony 2 : chapitre 4 - Les services et les formulairesAbdelkader Rhouati
 
Symfony 2 : chapitre 3 - Les modèles en Doctrine 2
Symfony 2 : chapitre 3 - Les modèles en Doctrine 2Symfony 2 : chapitre 3 - Les modèles en Doctrine 2
Symfony 2 : chapitre 3 - Les modèles en Doctrine 2Abdelkader Rhouati
 
Symfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation GénéraleSymfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation GénéraleAbdelkader Rhouati
 
Application web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapBassem ABCHA
 
Dot Zsuriken 2009 par autoprestige-tuning.fr
Dot Zsuriken 2009 par autoprestige-tuning.frDot Zsuriken 2009 par autoprestige-tuning.fr
Dot Zsuriken 2009 par autoprestige-tuning.frautoprestige
 
(LP2) Tópico 00 - Apresentação da Disciplina
(LP2) Tópico 00 - Apresentação da Disciplina(LP2) Tópico 00 - Apresentação da Disciplina
(LP2) Tópico 00 - Apresentação da DisciplinaFabricio Narcizo
 
Meet the DOT Doctor (Personal side)
Meet the DOT Doctor (Personal side)Meet the DOT Doctor (Personal side)
Meet the DOT Doctor (Personal side)The DOT Doctor
 
Institucional: DOT digital group
Institucional: DOT digital groupInstitucional: DOT digital group
Institucional: DOT digital groupDOT digital group
 
Les Herbes De Provence Au Canal2
Les Herbes De Provence Au Canal2Les Herbes De Provence Au Canal2
Les Herbes De Provence Au Canal2Fehl
 
Aplicaciones móviles para ambientes descentralizados
Aplicaciones móviles para ambientes descentralizadosAplicaciones móviles para ambientes descentralizados
Aplicaciones móviles para ambientes descentralizadosvladimir calderon
 

Destacado (20)

S2 ecogest-m2-13
S2 ecogest-m2-13S2 ecogest-m2-13
S2 ecogest-m2-13
 
PHP 5 pour les développeurs Java
PHP 5 pour les développeurs JavaPHP 5 pour les développeurs Java
PHP 5 pour les développeurs Java
 
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
 
Présentation symfony epita
Présentation symfony epitaPrésentation symfony epita
Présentation symfony epita
 
Php
PhpPhp
Php
 
Introduction à Laravel 4 @Dogstudio
Introduction à Laravel 4 @DogstudioIntroduction à Laravel 4 @Dogstudio
Introduction à Laravel 4 @Dogstudio
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP Next
 
Symfony 2 : chapitre 2 - Les vues en Twig
Symfony 2 : chapitre 2 - Les vues en TwigSymfony 2 : chapitre 2 - Les vues en Twig
Symfony 2 : chapitre 2 - Les vues en Twig
 
Symfony 2 : chapitre 4 - Les services et les formulaires
Symfony 2 : chapitre 4 - Les services et les formulairesSymfony 2 : chapitre 4 - Les services et les formulaires
Symfony 2 : chapitre 4 - Les services et les formulaires
 
Symfony 2 : chapitre 3 - Les modèles en Doctrine 2
Symfony 2 : chapitre 3 - Les modèles en Doctrine 2Symfony 2 : chapitre 3 - Les modèles en Doctrine 2
Symfony 2 : chapitre 3 - Les modèles en Doctrine 2
 
Symfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation GénéraleSymfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation Générale
 
Application web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrap
 
Relooking stratégique
Relooking stratégiqueRelooking stratégique
Relooking stratégique
 
Dot Zsuriken 2009 par autoprestige-tuning.fr
Dot Zsuriken 2009 par autoprestige-tuning.frDot Zsuriken 2009 par autoprestige-tuning.fr
Dot Zsuriken 2009 par autoprestige-tuning.fr
 
(LP2) Tópico 00 - Apresentação da Disciplina
(LP2) Tópico 00 - Apresentação da Disciplina(LP2) Tópico 00 - Apresentação da Disciplina
(LP2) Tópico 00 - Apresentação da Disciplina
 
Meet the DOT Doctor (Personal side)
Meet the DOT Doctor (Personal side)Meet the DOT Doctor (Personal side)
Meet the DOT Doctor (Personal side)
 
Point supply
Point supplyPoint supply
Point supply
 
Institucional: DOT digital group
Institucional: DOT digital groupInstitucional: DOT digital group
Institucional: DOT digital group
 
Les Herbes De Provence Au Canal2
Les Herbes De Provence Au Canal2Les Herbes De Provence Au Canal2
Les Herbes De Provence Au Canal2
 
Aplicaciones móviles para ambientes descentralizados
Aplicaciones móviles para ambientes descentralizadosAplicaciones móviles para ambientes descentralizados
Aplicaciones móviles para ambientes descentralizados
 

Similar a Php 5.3

Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...fdussert
 
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
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3Eddy RICHARD
 
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
 
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...Frederic Hardy
 
Mieux Développer en PHP avec Symfony
Mieux Développer en PHP avec SymfonyMieux Développer en PHP avec Symfony
Mieux Développer en PHP avec SymfonyHugo Hamon
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5julien pauli
 
SOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsSOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsVladyslav Riabchenko
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7neuros
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5halleck45
 
Drupal 8, symfony
Drupal 8, symfonyDrupal 8, symfony
Drupal 8, symfonyjeUXdiCode
 
0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdf0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdfRihabBENLAMINE
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Engineor
 

Similar a Php 5.3 (20)

Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
 
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
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3
 
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]
 
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
 
Mieux Développer en PHP avec Symfony
Mieux Développer en PHP avec SymfonyMieux Développer en PHP avec Symfony
Mieux Développer en PHP avec Symfony
 
Zf2 ce-qui-va-changer
Zf2 ce-qui-va-changerZf2 ce-qui-va-changer
Zf2 ce-qui-va-changer
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5
 
Php seance1
Php seance1Php seance1
Php seance1
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
SOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsSOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applications
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5
 
PHP.pptx
PHP.pptxPHP.pptx
PHP.pptx
 
Drupal 8, symfony
Drupal 8, symfonyDrupal 8, symfony
Drupal 8, symfony
 
Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
 
Initiation au langage PHP
Initiation au langage PHPInitiation au langage PHP
Initiation au langage PHP
 
0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdf0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdf
 
PHP5: Endgame
PHP5: EndgamePHP5: Endgame
PHP5: Endgame
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !
 

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