SlideShare une entreprise Scribd logo
Exploiter PHP 5
en utilisant tous les outils qu'il met a disposition
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
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 ?
Standard PHP Library
Standard PHP Library

• des interfaces
• des outils
• des itérateurs
• des structures de données
• des exceptions
Standard PHP Library

• des interfaces
• des outils
• des itérateurs
• des structures de données
• des exceptions
SPL - des interfaces


• Ajouter de nouveaux contrats entre vos objets et
 PHP

• un exemple : Countable.
     Combien d'entre vous ont déjà utilisé Countable ?
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
SPL - des interfaces

• Countable
• ArrayObject
• Iterator
• SplObserver / SplSubject
• ...
Standard PHP Library

• des interfaces
• des outils
• des itérateurs
• des structures de données
• des exceptions
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 !
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
SPL - des outils
• spl_autoload_register()
• class_implements()
• iterator_to_array()
• spl_object_hash()
• Classe SplFileInfo
• ...
Standard PHP Library

• des interfaces
• des outils
• des itérateurs
• des structures de données
• des exceptions
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) { ... }
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
}
SPL - des itérateurs



• IteratorAggregate
•
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
• ...
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
SPL - itérateur -> tableau
$obj1 = new MyIterator;

print_r(iterator_to_array($obj1));



Array

(

    [0] => 1

    [1] => 2

)
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 !
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
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
// )
Standard PHP Library

• des interfaces
• des outils
• des itérateurs
• des structures de données
• des exceptions
A vous de jouer...

Quelles structures de données avez vous l'habitude
d'utiliser ?
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 ?
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
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
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) {
   ...
}
Standard PHP Library

• des interfaces
• des outils
• des itérateurs
• des structures de données
• des exceptions
SPL - Exceptions
• LogicException (étend la classe Exception)
    • BadFunctionCallException
        • BadMethodCallException
    • DomainException
    • InvalidArgumentException
    • LengthException
    • OutOfRangeException
SPL - Exceptions
• RuntimeException (étend la classe Exception)
    • OutOfBoundsException
    • OverflowException
    • RangeException
    • UnderflowException
    • UnexpectedValueException
InvalidArgumentException

function triple($nombre) {
  if(!is_int($nombre)) {
     throw new InvalidArgumentException(
        'Un entier était attendu');
  }
  return $nombre * 3;
}
SPL - OverflowException
class Voiture
{
  public function ajouterPassager()
  {
     if ($this->nbPassagers > 4) {
        throw new OverflowException('Voitre pleine');
     }
  }
}
Quelques outils bons à
     connaître
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);
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
Exécuter une fonction... en dernier

register_shutdown_function(function() {
  echo 'je nettoie, je loggue, etc...' ;
});

echo "1n";
exit;
echo "2n";
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/
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
}
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>
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
C'est l'heure des
   questions
    Merci à vous !

Contenu connexe

PDF
Programmation Orientée Objet et les Traits en PHP 5.4
PPTX
Introduction à jQuery
PPTX
Introduction à Python
PPT
.php1 : les fondamentaux du PHP
PDF
Notions de base de JavaScript
PDF
Les listes en Python
PPTX
Requêtes HTTP synchrones et asynchrones
PPTX
php2 : formulaire-session-PDO
Programmation Orientée Objet et les Traits en PHP 5.4
Introduction à jQuery
Introduction à Python
.php1 : les fondamentaux du PHP
Notions de base de JavaScript
Les listes en Python
Requêtes HTTP synchrones et asynchrones
php2 : formulaire-session-PDO

Tendances (19)

PPTX
Cpp2 : classes et objets
PPT
Introduction à JavaScript
ODP
Introduction à JavaScript
PPTX
Cours javascript v1
PPT
PHP5 - POO
PPTX
Csharp2 : classes et objets
PPTX
Introduction au Jquery
PDF
Function oop - bonnes pratiques ms tech days
ODP
Patterns et bonnes pratiques autour de JavaScript
PPTX
cpp1 : Quelques elements de base du C++
PPTX
Initiation à l'algorithmique
PPTX
Introduction à JavaScript
PPTX
Initiation à l'algorithmique
PPTX
Csharp1 : quelques elements de base
PDF
PPTX
Javascript un langage supérieur
PPTX
Python For Data Science - French Course
PDF
Playing With PHP 5.3
PPT
Les fondamentaux du langage C
Cpp2 : classes et objets
Introduction à JavaScript
Introduction à JavaScript
Cours javascript v1
PHP5 - POO
Csharp2 : classes et objets
Introduction au Jquery
Function oop - bonnes pratiques ms tech days
Patterns et bonnes pratiques autour de JavaScript
cpp1 : Quelques elements de base du C++
Initiation à l'algorithmique
Introduction à JavaScript
Initiation à l'algorithmique
Csharp1 : quelques elements de base
Javascript un langage supérieur
Python For Data Science - French Course
Playing With PHP 5.3
Les fondamentaux du langage C
Publicité

En vedette (20)

PDF
Outils et pratiques : tester une application web moderne
PPTX
Scrumday2015 : Le plus petit pas par Nicolas Gouy
PDF
Etat des lieux des TIC au Togo
PDF
Scrumday 2015 : La horde Agile par Pablo Pernot
PDF
Evaluation certificative epreuves externes communes (ceb) 2010 - résultats ...
PPT
6. wco business process modelling
PDF
Calendrier Concours de la Fonction Publique session 2014
PDF
Présentation de Marthon & de la Tour Saint Jean
PPT
Le groupe associatif Alptis réinvente ses processus métier pour se rapprocher...
PPT
Quelques personnalités italiennes “intégrées" à l’étranger au fil des années.
PPTX
PPTX
Forteresse Soroca
PDF
bdwgoogle
PDF
Dompter Google
PDF
Alex. bd introduction french
PPTX
Facilitez vous la vie - Ricardo Minhoto
PDF
092812 david addington article (french)
PPT
Ie ihesi
DOCX
Louaize bc conference summary french w
PDF
Paris papers françois le poultier
Outils et pratiques : tester une application web moderne
Scrumday2015 : Le plus petit pas par Nicolas Gouy
Etat des lieux des TIC au Togo
Scrumday 2015 : La horde Agile par Pablo Pernot
Evaluation certificative epreuves externes communes (ceb) 2010 - résultats ...
6. wco business process modelling
Calendrier Concours de la Fonction Publique session 2014
Présentation de Marthon & de la Tour Saint Jean
Le groupe associatif Alptis réinvente ses processus métier pour se rapprocher...
Quelques personnalités italiennes “intégrées" à l’étranger au fil des années.
Forteresse Soroca
bdwgoogle
Dompter Google
Alex. bd introduction french
Facilitez vous la vie - Ricardo Minhoto
092812 david addington article (french)
Ie ihesi
Louaize bc conference summary french w
Paris papers françois le poultier
Publicité

Similaire à Exploiter php 5 (20)

PPTX
Php 5.3
PDF
PHPTour-2011-PHP_Extensions
ODP
Patterns and OOP in PHP
PPT
PHP 5.3, PHP Next
PDF
Objets patterns et genie logiciel , par Julien Pauli
PPTX
PDF
chapitre 4-PHP5 module web part2 (1).pdf
PPTX
PHP : les fondamentaux (2ème partie)
ODP
Présentation de PHP 5.4 [FR]
PPTX
S2-01-PHP.pptx
PPTX
PHP Training
PDF
Php 7.4 2020-01-28 - afup
KEY
Conference Php Web Services
PDF
Chapitre5_Cours_TechProgWeb_LI2 mr Malek .pdf
PPTX
La première partie de la présentation PHP
PDF
Analyse statique et applications
PPTX
Initiation au langage PHP
PPT
Php4 Mysql
PPT
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
PDF
PHP 5.3 : les nouveautés du futur si proche
Php 5.3
PHPTour-2011-PHP_Extensions
Patterns and OOP in PHP
PHP 5.3, PHP Next
Objets patterns et genie logiciel , par Julien Pauli
chapitre 4-PHP5 module web part2 (1).pdf
PHP : les fondamentaux (2ème partie)
Présentation de PHP 5.4 [FR]
S2-01-PHP.pptx
PHP Training
Php 7.4 2020-01-28 - afup
Conference Php Web Services
Chapitre5_Cours_TechProgWeb_LI2 mr Malek .pdf
La première partie de la présentation PHP
Analyse statique et applications
Initiation au langage PHP
Php4 Mysql
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
PHP 5.3 : les nouveautés du futur si proche

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 ?
  • 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 !

Notes de l'éditeur