Advertisement
Advertisement

More Related Content

Advertisement

Exploiter php 5

  1. Exploiter PHP 5 en utilisant tous les outils qu'il met a disposition
  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. 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. Standard PHP Library
  5. Standard PHP Library • des interfaces • des outils • des itérateurs • des structures de données • des exceptions
  6. Standard PHP Library • des interfaces • des outils • des itérateurs • des structures de données • des exceptions
  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. 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. SPL - des interfaces • Countable • ArrayObject • Iterator • SplObserver / SplSubject • ...
  10. Standard PHP Library • des interfaces • des outils • des itérateurs • des structures de données • des exceptions
  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. 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. SPL - des outils • spl_autoload_register() • class_implements() • iterator_to_array() • spl_object_hash() • Classe SplFileInfo • ...
  14. Standard PHP Library • des interfaces • des outils • des itérateurs • des structures de données • des exceptions
  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. 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. SPL - des itérateurs • IteratorAggregate •
  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. 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. SPL - itérateur -> tableau $obj1 = new MyIterator; print_r(iterator_to_array($obj1)); Array ( [0] => 1 [1] => 2 )
  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. 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. 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. Standard PHP Library • des interfaces • des outils • des itérateurs • des structures de données • des exceptions
  25. A vous de jouer... Quelles structures de données avez vous l'habitude d'utiliser ?
  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. 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. 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. 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. Standard PHP Library • des interfaces • des outils • des itérateurs • des structures de données • des exceptions
  31. SPL - Exceptions • LogicException (étend la classe Exception) • BadFunctionCallException • BadMethodCallException • DomainException • InvalidArgumentException • LengthException • OutOfRangeException
  32. SPL - Exceptions • RuntimeException (étend la classe Exception) • OutOfBoundsException • OverflowException • RangeException • UnderflowException • UnexpectedValueException
  33. InvalidArgumentException function triple($nombre) { if(!is_int($nombre)) { throw new InvalidArgumentException( 'Un entier était attendu'); } return $nombre * 3; }
  34. SPL - OverflowException class Voiture { public function ajouterPassager() { if ($this->nbPassagers > 4) { throw new OverflowException('Voitre pleine'); } } }
  35. Quelques outils bons à connaître
  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. 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. Exécuter une fonction... en dernier register_shutdown_function(function() { echo 'je nettoie, je loggue, etc...' ; }); echo "1n"; exit; echo "2n";
  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. 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. 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. 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. C'est l'heure des questions Merci à vous !

Editor's Notes

  1. \n\n
  2. \n\n
  3. \n\n
  4. \n\n
  5. \n\n
  6. \n\n
  7. \n\n
  8. \n\n
  9. \n\n
  10. \n\n
  11. \n\n
  12. \n\n
  13. \n\n
  14. \n\n
  15. \n\n
  16. \n\n
  17. \n\n
  18. \n\n
  19. \n\n
  20. \n\n
  21. \n\n
  22. \n\n
  23. \n\n
  24. \n\n
  25. \n\n
  26. \n\n
  27. \n\n
  28. \n\n
  29. \n\n
  30. \n\n
  31. \n\n
  32. \n\n
  33. \n\n
  34. \n\n
  35. \n\n
  36. \n\n
  37. \n\n
  38. \n\n
  39. \n\n
  40. \n\n
  41. \n\n
  42. \n\n
Advertisement