php 5.3

45
Intervenant: Benoît DURAND b.durand at epixelic dot com PHP 5.3 Les namespaces, et les closures 05/10/2011 Développement

Upload: epixelic

Post on 21-Jun-2015

1.090 views

Category:

Technology


0 download

DESCRIPTION

PHP 5.3Les namespaces, et les closures

TRANSCRIPT

Page 1: Php 5.3

Intervenant: Benoît DURAND b.durand at epixelic dot com

PHP 5.3Les namespaces, et les closures

05/10/2011 Développement

Page 2: Php 5.3

Les espaces de noms(namespaces)

Page 3: Php 5.3

3

La portée

1. Fonctions2. Classes3. Constantes

05/10/2011 PHP 5.3

Page 4: Php 5.3

4

La déclaration

Le mot clé est :namespace

Le séparateur est : \

05/10/2011 PHP 5.3

Page 5: Php 5.3

5

La déclaration

<?phpnamespace Epx;

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

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

05/10/2011 PHP 5.3

Page 6: Php 5.3

6

Les sous espaces de noms

Le séparateur d’espaces de noms permet de définir un sous espace de nom :

namespace Epx\Payment;

05/10/2011 PHP 5.3

Page 7: Php 5.3

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

Page 8: Php 5.3

8

L’ordre de résolution

1. Un nom qualifiéException\RuntimeException

2. L’espace de nom courantRuntimeException

3. L’espace de nom global\RuntimeException

05/10/2011 PHP 5.3

Page 9: Php 5.3

9

Utilisation des espaces de noms

// Fonctionecho number_format(2); // Affiche 2echo Epx\number_format(2); // Affiche 2,00

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

// Constanteconst APPLICATION_ENV = 'cli'; // Nouveauté 5.3echo APPLICATION_ENV; // Affiche cli05/10/2011 PHP 5.3

Page 10: Php 5.3

10

Import

Le mot clé est :

use

05/10/2011 PHP 5.3

Page 11: Php 5.3

11

Import

namespace Epx;

use Zend\Registry, // import de la classe Zend\Translator; // import de l’espace de nom

$r = new Registry;$t = new Translator\Translator;

05/10/2011 PHP 5.3

Page 12: Php 5.3

12

Alias

Le mot clé est : as

05/10/2011 PHP 5.3

Page 13: Php 5.3

13

Alias

namespace Application;use Zend\Controller\Action as ActionController;

class IndexController extends ActionController {}

05/10/2011 PHP 5.3

Page 14: Php 5.3

14

Vous êtes perdus ?

• Nouvelle constante magique__NAMESPACE__

05/10/2011 PHP 5.3

Page 15: Php 5.3

15

Etude de cas

// Aujourd’hui, ZF1 est en style PHP 5.2require_once 'Zend_Controller_Action';

class IndexController extends Zend_Controller_Action {}

05/10/2011 PHP 5.3

Page 16: Php 5.3

16

Etude de cas : migration d’une librairie

// Import du contrôleur ZF1use Zend_Controller_Action as ActionController;class IndexController extends ActionController {}

// Après la migration ZF2use Zend\Controller\Action as ActionController;class IndexController extends ActionController {}

05/10/2011 PHP 5.3

Page 17: Php 5.3

17

Lisibilité du code

// Test sur un type d’objetnamespace Zend\Log;if ($writer instanceof Writer) {/*…*/}

// Type d’une classenamespace Zend\Log\Writer;use Zend\Log\Writer;class Mail implements Writer {}

05/10/2011 PHP 5.3

Page 18: Php 5.3

18

Lisibilité du code

// Notation ZF1 compatible PHP 5.2$vr = new Zend_Controller_Action_Helper_ViewRenderer;Zend_Controller_Action_HelperBroker::addHelper($vr);

// Notation raccourcieuse Zend\Controller\Action\HelperBroker, Zend\Controller\Action\Helper\ViewRenderer;HelperBroker::addHelper(new ViewRenderer);

05/10/2011 PHP 5.3

Page 19: Php 5.3

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

Page 20: Php 5.3

20

PSR-0 : exemples

• Zend\Mail\Message=> /vendor/Zend/Mail/Message.php• Doctrine\ORM\EntityManager=> /vendor/Doctrine/ORM/EntityManager.php• Symfony\Component\Yaml\Parser=> /vendor/Symfony/Component/Yaml/Parser.php

05/10/2011 PHP 5.3

Page 21: Php 5.3

21

Résumons

• Améliorer la lecture avec des noms courts

05/10/2011 PHP 5.3

Page 22: Php 5.3

22

Résumons

• Améliorer la lecture avec des noms courts• Refactoriser devient simple

05/10/2011 PHP 5.3

Page 23: 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

05/10/2011 PHP 5.3

Page 24: 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

05/10/2011 PHP 5.3

Page 25: 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

05/10/2011 PHP 5.3

Page 26: 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

05/10/2011 PHP 5.3

Page 27: Php 5.3

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

Page 28: Php 5.3

Les fonctions anonymes(closures)

Page 29: Php 5.3

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

Page 30: Php 5.3

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

Page 31: Php 5.3

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

Page 32: Php 5.3

Bonus

Page 33: Php 5.3

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

Page 34: Php 5.3

34

Nouvelle méthode magique

namespace My\Filter;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

Page 35: Php 5.3

35

Les limitations du mot clé self

namespace Cwp\Boutique;class Commande{ public static function get($id) { return new self; }}

use Cwp\BoutiqueEvolution\Commande;$cl = get_class(Commande::get(42));var_dump($cl); // Affiche Cwp\Boutique\Commande05/10/2011 PHP 5.3

Page 36: Php 5.3

36

Late State Binding

Le mot clé est :

static

05/10/2011 PHP 5.3

Page 37: Php 5.3

37

Late State Binding

namespace Cwp\Boutique;class Commande{ public static function get($id) { return new static; }}

use Cwp\BoutiqueEvolution\Commande;$cl = get_class(Commande::get(42));var_dump($cl); // Affiche Cwp\BoutiqueEvolution\Commande05/10/2011 PHP 5.3

Page 38: Php 5.3

38

Autres nouveautés

• Nouvelle constante magique__DIR__ === dirname(__FILE__)

05/10/2011 PHP 5.3

Page 39: Php 5.3

39

Autres nouveautés

• Nouvelle constante magique__DIR__ === dirname(__FILE__)• Nouvelle méthode magique__callStatic()

05/10/2011 PHP 5.3

Page 40: Php 5.3

40

Autres nouveautés

• Nouvelle constante magique__DIR__ === dirname(__FILE__)• Nouvelle méthode magique__callStatic()• Phar (archive PHP)

05/10/2011 PHP 5.3

Page 41: Php 5.3

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

Page 42: 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

05/10/2011 PHP 5.3

Page 43: Php 5.3

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

Page 45: Php 5.3

PHP 5.3 45

Questions ?

05/10/2011