Php 5.3

1,241 views
1,191 views

Published on

PHP 5.3
Les namespaces, et les closures

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,241
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
16
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Php 5.3

  1. 1. Intervenant: Benoît DURAND b.durand at epixelic dot com PHP 5.3 Les namespaces, et les closures05/10/2011 Développement
  2. 2. Les espaces de noms (namespaces)
  3. 3. La portée1. Fonctions2. Classes3. Constantes05/10/2011 PHP 5.3 3
  4. 4. La déclarationLe mot clé est :namespaceLe séparateur est : 05/10/2011 PHP 5.3 4
  5. 5. La déclaration<?phpnamespace Epx;function number_format($number) { return number_format($number, 2, ,, );}echo number_format(2); // Affiche 2,0005/10/2011 PHP 5.3 5
  6. 6. Les sous espaces de nomsLe séparateur d’espaces de noms permet dedéfinir un sous espace de nom :namespace EpxPayment;05/10/2011 PHP 5.3 6
  7. 7. L’ordre de résolution1. Un nom qualifié2. L’espace de nom courant3. L’espace de nom global05/10/2011 PHP 5.3 7
  8. 8. L’ordre de résolution1. Un nom qualifié ExceptionRuntimeException2. L’espace de nom courant RuntimeException3. L’espace de nom global RuntimeException05/10/2011 PHP 5.3 8
  9. 9. Utilisation des espaces de noms// Fonctionecho number_format(2); // Affiche 2echo Epxnumber_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 9
  10. 10. ImportLe mot clé est :use05/10/2011 PHP 5.3 10
  11. 11. Importnamespace 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. 12. AliasLe mot clé est : as05/10/2011 PHP 5.3 12
  13. 13. Aliasnamespace Application;use ZendControllerAction as ActionController;class IndexController extends ActionController {}05/10/2011 PHP 5.3 13
  14. 14. Vous êtes perdus ?• Nouvelle constante magique__NAMESPACE__05/10/2011 PHP 5.3 14
  15. 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 15
  16. 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 ZendControllerAction as ActionController;class IndexController extends ActionController {}05/10/2011 PHP 5.3 16
  17. 17. Lisibilité du code// Test sur un type d’objetnamespace ZendLog;if ($writer instanceof Writer) {/*…*/}// Type d’une classenamespace ZendLogWriter;use ZendLogWriter;class Mail implements Writer {}05/10/2011 PHP 5.3 17
  18. 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 ZendControllerActionHelperBroker, ZendControllerActionHelperViewRenderer;HelperBroker::addHelper(new ViewRenderer);05/10/2011 PHP 5.3 18
  19. 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. 20. PSR-0 : exemples• ZendMailMessage=> /vendor/Zend/Mail/Message.php• DoctrineORMEntityManager=> /vendor/Doctrine/ORM/EntityManager.php• SymfonyComponentYamlParser=> /vendor/Symfony/Component/Yaml/Parser.php05/10/2011 PHP 5.3 20
  21. 21. Résumons• Améliorer la lecture avec des noms courts05/10/2011 PHP 5.3 21
  22. 22. Résumons• Améliorer la lecture avec des noms courts• Refactoriser devient simple05/10/2011 PHP 5.3 22
  23. 23. Résumons• Améliorer la lecture avec des noms courts• Refactoriser devient simple• Chaque classe définit un espace de nom05/10/2011 PHP 5.3 23
  24. 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 fichier05/10/2011 PHP 5.3 24
  25. 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 unique05/10/2011 PHP 5.3 25
  26. 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_once05/10/2011 PHP 5.3 26
  27. 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
  28. 28. Les fonctions anonymes (closures)
  29. 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. 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. 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. 32. Bonus
  33. 33. Amélioration des performances• Drupal : 20% plus rapide• Wordpress : 15% plus rapidesource : http://news.php.net/php.internals/3648405/10/2011 PHP 5.3 33
  34. 34. Nouvelle méthode magiquenamespace MyFilter;class Int{ public function __invoke($value) { return filter_var($value, FILTER_SANITIZE_NUMBER_INT); }}$filter = new Int;var_dump($filter(CL1234)); // Affiche 123405/10/2011 PHP 5.3 34
  35. 35. Les limitations du mot clé selfnamespace CwpBoutique;class Commande{ public static function get($id) { return new self; }}use CwpBoutiqueEvolutionCommande;$cl = get_class(Commande::get(42));var_dump($cl); // Affiche CwpBoutiqueCommande05/10/2011 PHP 5.3 35
  36. 36. Late State BindingLe mot clé est : static05/10/2011 PHP 5.3 36
  37. 37. Late State Bindingnamespace CwpBoutique;class Commande{ public static function get($id) { return new static; }}use CwpBoutiqueEvolutionCommande;$cl = get_class(Commande::get(42));var_dump($cl); // Affiche CwpBoutiqueEvolutionCommande05/10/2011 PHP 5.3 37
  38. 38. Autres nouveautés• Nouvelle constante magique__DIR__ === dirname(__FILE__)05/10/2011 PHP 5.3 38
  39. 39. Autres nouveautés• Nouvelle constante magique__DIR__ === dirname(__FILE__)• Nouvelle méthode magique__callStatic()05/10/2011 PHP 5.3 39
  40. 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. 41. Autres nouveautés• Nouvelle constante magique__DIR__ === dirname(__FILE__)• Nouvelle méthode magique__callStatic()• Phar (archive PHP)• Ajout de NOWDOC05/10/2011 PHP 5.3 41
  42. 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 collector05/10/2011 PHP 5.3 42
  43. 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 Windows05/10/2011 PHP 5.3 43
  44. 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.php11/04/2011 Git 44
  45. 45. Questions ?05/10/2011 PHP 5.3 45

×