Ce diaporama a bien été signalé.

Exploiter php 5

1

Partager

Chargement dans…3
×
1 sur 43
1 sur 43

Plus De Contenu Connexe

Exploiter php 5

  1. 1. Exploiter PHP 5 en utilisant tous les outils qu'il met a disposition
  2. 2. En face de vous... • Jean-François Lépine (jeanfrancois@lepine.pro) • Vice secrétaire de l'AFUP • auteur du mémento PHP 5 Industrialisation • http://blog.lepine.pro
  3. 3. Combien d'entre vous... • ont entendu parler de la SPL ? • utilisent des fonctions de la SPL ? • ont déjà utilisé des tableaux de taille fixe en PHP ? • ont déjà exécuté du code même après un exit ou un die ? • ont déjà mis un écouteur sur un code pour exécuter une fonction personnalisée tous les n blocs de code ? • ont déjà passé un paramètre (post ou get) de page en page automatiquement ?
  4. 4. Standard PHP Library
  5. 5. Standard PHP Library • des interfaces • des outils • des itérateurs • des structures de données • des exceptions
  6. 6. Standard PHP Library • des interfaces • des outils • des itérateurs • des structures de données • des exceptions
  7. 7. SPL - des interfaces • Ajouter de nouveaux contrats entre vos objets et PHP • un exemple : Countable. Combien d'entre vous ont déjà utilisé Countable ?
  8. 8. SPL - des interfaces class Batiment {} class Salle implements Countable { public function count() { return 5; } } $batiment = new Batiment; $salle = new Salle; $n1 = sizeof($salle); // 5 $n2 = sizeof($batiment) // 1
  9. 9. SPL - des interfaces • Countable • ArrayObject • Iterator • SplObserver / SplSubject • ...
  10. 10. Standard PHP Library • des interfaces • des outils • des itérateurs • des structures de données • des exceptions
  11. 11. SPL - des outils Au toload ing !! set_include_path( get_include_path().PATH_SEPARATOR.'./library/class/' ); spl_autoload_extensions('.php,.php5,.inc'); spl_autoload_register(); Et c'est tout !
  12. 12. Autoloading et PSR-0 • Les espaces de nom et les classes doivent être préfixées par le nom de fournisseur de code (ex: Zend_) • Chaque séparateur d'espace de nom (/) et chaque underscore (_) dans le nom d'une classe correspond à un changement de dossier • Le nom complet d'une classe est suffixé par ".php" • Les noms de classes, espaces de noms... peuvent contenir des minuscules et des majuscules
  13. 13. SPL - des outils • spl_autoload_register() • class_implements() • iterator_to_array() • spl_object_hash() • Classe SplFileInfo • ...
  14. 14. Standard PHP Library • des interfaces • des outils • des itérateurs • des structures de données • des exceptions
  15. 15. SPL - des itérateurs • Permet de parcourir un objet, qui représente alors une liste, un ensemble, une pile, une collection... • L'objet implémente une Interface spécifique $objet = new Exemple; foreach($objet as $o) { ... }
  16. 16. SPL - des itérateurs interface Iterator extends Traversable { function rewind(); Réinitialiser function valid(); Tester function current(); Valeur courante function key(); Clef courante function next(); Avancer }
  17. 17. SPL - des itérateurs • IteratorAggregate •
  18. 18. SPL - Itérateurs et récursivité • RecursiveArrayIterator Les classes respectent le contrat de la récursivite, mais ne l'implémentent • RecursiveCachingIterator pas • RecursiveDirectoryIterator • RecursiveRegexIterator terator eratorI • RecursiveTreeIterator R ecu rsiveIt cette réc ursivité impl émente • ...
  19. 19. SPL - Récursivite $arr = array(1, 2, array(3, 4, 5), 6); $obj1 = new RecursiveArrayIterator($arr); foreach($obj1 as $e) { echo $e; }; // 12Array6 $obj2 = new RecursiveIteratorIterator($obj1); foreach($obj2 as $e) { echo $e; }; // 123456
  20. 20. SPL - itérateur -> tableau $obj1 = new MyIterator; print_r(iterator_to_array($obj1)); Array ( [0] => 1 [1] => 2 )
  21. 21. RegexIterator / RecursiveRegexIterator preg_match_all() => RegexIterator::ALL_MATCHES preg_match() => RegexIterator::GET_MATCH preg_match() => RegexIterator::MATCH preg_replace() => RegexIterator::REPLACE preg_split() => RegexIterator::SPLIT Ju ste génial !
  22. 22. RegexIterator : Match $a = new ArrayIterator(array('test 1', 'another test', 'test 123')); $b = new RegexIterator($a, '/^test/', RegexIterator::MATCH); foreach ($b as $value) { echo $value . "n"; } // test 1 // test 123
  23. 23. RegexIterator : Replace $a = new ArrayIterator(array('test1', 'test2', 'test3')); $b = new RegexIterator($a, '/^(test)(d+)/', RegexIterator::REPLACE); $b>replacement = '$2:$1'; print_r(iterator_to_array($b)); // Array // ( // [0] => 1:test // [1] => 2:test // [2] => 3:test // )
  24. 24. Standard PHP Library • des interfaces • des outils • des itérateurs • des structures de données • des exceptions
  25. 25. A vous de jouer... Quelles structures de données avez vous l'habitude d'utiliser ?
  26. 26. A vous de jouer... Quelles structures de données avez vous l'habitude d'utiliser ? • Des piles triées ? • Des conteneurs ? • Des files d'attente ? • Des tas ? • Des tableaux ?
  27. 27. SPL - Principales structures de données • Des piles triées ? SplHeap, SplHeapMin, SplHeapMax • Des conteneurs ? SplObjectStorage • Des files d'attente ? SplQueue, SplPriorityQueue • Des tas ? SplStack
  28. 28. Exemple : SplObjectStorage $container = new SplObjectStorage; $pierre = new StdClass; $paul = new StdClass; $container->attach($pierre); $container->attach($paul); $container->attach($pierre); $container->attach($pierre); var_dump(sizeof($container)); // 2
  29. 29. Eh ! Et les tableaux ? $array = new SplFixedArray(3); $array[0] = 'A'; $array[1] = 'B'; $array[2] = 'C'; $array->setSize(4); lus performant en lecture ! $array[3] = 'D'; P try { var_dump($array[10]); } catch(RuntimeException $re) { ... }
  30. 30. Standard PHP Library • des interfaces • des outils • des itérateurs • des structures de données • des exceptions
  31. 31. SPL - Exceptions • LogicException (étend la classe Exception) • BadFunctionCallException • BadMethodCallException • DomainException • InvalidArgumentException • LengthException • OutOfRangeException
  32. 32. SPL - Exceptions • RuntimeException (étend la classe Exception) • OutOfBoundsException • OverflowException • RangeException • UnderflowException • UnexpectedValueException
  33. 33. InvalidArgumentException function triple($nombre) { if(!is_int($nombre)) { throw new InvalidArgumentException( 'Un entier était attendu'); } return $nombre * 3; }
  34. 34. SPL - OverflowException class Voiture { public function ajouterPassager() { if ($this->nbPassagers > 4) { throw new OverflowException('Voitre pleine'); } } }
  35. 35. Quelques outils bons à connaître
  36. 36. appel dynamique de fonction function doAny($a) {} Un callable c'est : $func = 'doAny'; • une fonction anonyme $func(1); • une closure • une chaine • un tableau call_user_func('doAny', 1);
  37. 37. Exécuter une fonction... en dernier • Vraiment en dernier • Après tous les __destruct() • Même après un die() ou un exit() wn_function() register _shutdo
  38. 38. Exécuter une fonction... en dernier register_shutdown_function(function() { echo 'je nettoie, je loggue, etc...' ; }); echo "1n"; exit; echo "2n";
  39. 39. Inclure automatiquement des fichiers r est int erprété e fichie • dans le php.ini L auto_prepend_file=/path/ auto_append_file=/path/ • Apache Php_value auto_prepend_file /path/
  40. 40. Bufferisation ob_start(); echo 'ok'; • Fonction de rappel $result = ob_get_contents(); • Compression ob_clean(); (ob_gzhandler) if($result == 'ok') { echo 'super !'; • Taille du tampon }
  41. 41. Réecriture du tampon de sortie output_add_rewrite_var('prenom', 'jeanfrancois'); ?> <a href="page2.php">page2</a> <form method="post" action="page3.php"> <input type="text" name="any" /> </form> <a href="page2.php?prenom=jeanfrancois">page2</a> <form method="post" action="page3.php"> <input type="hidden" name="prenom" value="jeanfrancois" /> <input type="text" name="any" /> </form>
  42. 42. Fonction exécutée en cycles function myFunction() { echo 'demo'.PHP_EOL; } declare(ticks=1); register_tick_function('myFunction'); echo 1; echo 2; Danger ! // demo Pour des be soins précis ! // 1demo // 2demo
  43. 43. C'est l'heure des questions Merci à vous !

Remarques

  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • \n\n
  • ×