SlideShare une entreprise Scribd logo
1  sur  43
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

Tendances

Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objetsAbdoulaye Dieng
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptAbdoulaye Dieng
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptMicrosoft
 
PHP5 - POO
PHP5 - POOPHP5 - POO
PHP5 - POOmazenovi
 
Csharp2 : classes et objets
Csharp2 : classes et objetsCsharp2 : classes et objets
Csharp2 : classes et objetsAbdoulaye Dieng
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech daysJean-Pierre Vincent
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptMicrosoft Technet France
 
cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++Abdoulaye Dieng
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmiqueAbdoulaye Dieng
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptAbdoulaye Dieng
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmiqueAbdoulaye Dieng
 
Csharp1 : quelques elements de base
Csharp1 :  quelques elements de baseCsharp1 :  quelques elements de base
Csharp1 : quelques elements de baseAbdoulaye Dieng
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French CourseHaytam EL YOUSSFI
 
Les fondamentaux du langage C
Les fondamentaux du langage CLes fondamentaux du langage C
Les fondamentaux du langage CAbdoulaye Dieng
 

Tendances (19)

Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objets
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Cours javascript v1
Cours javascript v1Cours javascript v1
Cours javascript v1
 
PHP5 - POO
PHP5 - POOPHP5 - POO
PHP5 - POO
 
Csharp2 : classes et objets
Csharp2 : classes et objetsCsharp2 : classes et objets
Csharp2 : classes et objets
 
Introduction au Jquery
Introduction au JqueryIntroduction au Jquery
Introduction au Jquery
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech days
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScript
 
cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
Csharp1 : quelques elements de base
Csharp1 :  quelques elements de baseCsharp1 :  quelques elements de base
Csharp1 : quelques elements de base
 
Cours php
Cours phpCours php
Cours php
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Playing With PHP 5.3
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3
 
Les fondamentaux du langage C
Les fondamentaux du langage CLes fondamentaux du langage C
Les fondamentaux du langage C
 

En vedette

Outils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web moderneOutils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web modernehalleck45
 
Scrumday2015 : Le plus petit pas par Nicolas Gouy
Scrumday2015 :  Le plus petit pas par Nicolas GouyScrumday2015 :  Le plus petit pas par Nicolas Gouy
Scrumday2015 : Le plus petit pas par Nicolas GouyFrench Scrum User Group
 
Etat des lieux des TIC au Togo
Etat des lieux des TIC au TogoEtat des lieux des TIC au Togo
Etat des lieux des TIC au Togoadogba
 
Scrumday 2015 : La horde Agile par Pablo Pernot
Scrumday 2015 : La horde Agile par Pablo PernotScrumday 2015 : La horde Agile par Pablo Pernot
Scrumday 2015 : La horde Agile par Pablo PernotFrench Scrum User Group
 
Evaluation certificative epreuves externes communes (ceb) 2010 - résultats ...
Evaluation certificative   epreuves externes communes (ceb) 2010 - résultats ...Evaluation certificative   epreuves externes communes (ceb) 2010 - résultats ...
Evaluation certificative epreuves externes communes (ceb) 2010 - résultats ...lesoirbe
 
6. wco business process modelling
6. wco business process modelling6. wco business process modelling
6. wco business process modellingsugogo
 
Calendrier Concours de la Fonction Publique session 2014
Calendrier Concours de la Fonction Publique session 2014Calendrier Concours de la Fonction Publique session 2014
Calendrier Concours de la Fonction Publique session 2014Antoine MIAN
 
Présentation de Marthon & de la Tour Saint Jean
Présentation de Marthon & de la Tour Saint JeanPrésentation de Marthon & de la Tour Saint Jean
Présentation de Marthon & de la Tour Saint JeanTour Saint Jean
 
Le groupe associatif Alptis réinvente ses processus métier pour se rapprocher...
Le groupe associatif Alptis réinvente ses processus métier pour se rapprocher...Le groupe associatif Alptis réinvente ses processus métier pour se rapprocher...
Le groupe associatif Alptis réinvente ses processus métier pour se rapprocher...Solutions IT et Business
 
Quelques personnalités italiennes “intégrées" à l’étranger au fil des années.
Quelques personnalités italiennes “intégrées" à l’étranger au fil des années.Quelques personnalités italiennes “intégrées" à l’étranger au fil des années.
Quelques personnalités italiennes “intégrées" à l’étranger au fil des années.Annaprof
 
Forteresse Soroca
 Forteresse  Soroca Forteresse  Soroca
Forteresse SorocaDana Barbie
 
Facilitez vous la vie - Ricardo Minhoto
Facilitez vous la vie - Ricardo MinhotoFacilitez vous la vie - Ricardo Minhoto
Facilitez vous la vie - Ricardo MinhotoSOAT
 
092812 david addington article (french)
092812   david addington article (french)092812   david addington article (french)
092812 david addington article (french)VogelDenise
 
Louaize bc conference summary french w
Louaize bc conference summary french wLouaize bc conference summary french w
Louaize bc conference summary french wIAU_Past_Conferences
 
Paris papers françois le poultier
Paris papers françois le poultierParis papers françois le poultier
Paris papers françois le poultierIAU_Past_Conferences
 

En vedette (20)

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

Similaire à Exploiter php 5

Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)Damien Seguy
 
Les principes de base de PHP
 Les principes de base de PHP  Les principes de base de PHP
Les principes de base de PHP EL JAOUARI Ahmed
 
Cours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partieCours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partiekadzaki
 
Android Optimisations Greendroid
Android Optimisations GreendroidAndroid Optimisations Greendroid
Android Optimisations GreendroidGDG Nantes
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Kristen Le Liboux
 
Developpement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdfDeveloppement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdfrachidimstapha
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJean-Pierre Vincent
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3Eddy RICHARD
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Dr Samir A. ROUABHI
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP NextSQLI
 

Similaire à Exploiter php 5 (20)

Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
Les principes de base de PHP
 Les principes de base de PHP  Les principes de base de PHP
Les principes de base de PHP
 
Php cours
Php coursPhp cours
Php cours
 
La première partie de la présentation PHP
La première partie de la présentation PHPLa première partie de la présentation PHP
La première partie de la présentation PHP
 
Audits php
Audits phpAudits php
Audits php
 
Php1
Php1Php1
Php1
 
Cours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partieCours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partie
 
Ce bon vieux propel
Ce bon vieux propelCe bon vieux propel
Ce bon vieux propel
 
Android Optimisations Greendroid
Android Optimisations GreendroidAndroid Optimisations Greendroid
Android Optimisations Greendroid
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
Cours php bac info
Cours php bac infoCours php bac info
Cours php bac info
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5
 
Developpement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdfDeveloppement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdf
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOP
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP Next
 
Ruby Pour RoR
Ruby Pour RoRRuby Pour RoR
Ruby Pour RoR
 
PHP.pptx
PHP.pptxPHP.pptx
PHP.pptx
 

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

  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