Apprendre à coder sur pierre-giraud.com

DES COURS COMPLETS ET GRATUITS POUR TOUS

SOMMAIRE

Introduction

  1. Présentation du cours
  2. Introduction au PHP
  3. Mettre en place un env. de travail

Les bases en PHP

  1. Syntaxe de base du PHP
  2. Premières instructions PHP
  3. Introduction aux variables PHP
  4. Types de valeurs et concaténation
  5. Opérations sur les variables
  6. Conditions et opérateurs de comparaison
  7. Les conditions if, if...else et if... elseif... else
  8. Utilisation avancée des conditions
  9. Structures ternaires et switch
  10. Les boucles PHP
  11. Découverte des fonctions
  12. La portée des variables
  13. Les constantes PHP
  14. Les variables tableaux PHP
  15. Tableaux associatifs
  16. Tableaux multidimensionnels
  17. Test n°1

Gestion des dates en PHP

  1. Le timestamp
  2. Obtenir et formater une date
  3. Tester la validité d'une date
  4. Test n°2

Opérations sur les fichiers en PHP

  1. Lire, ouvrir, fermer un fichier
  2. Parcourir et lire un fichier par partie
  3. Créer un fichier et écrire dedans
  4. Ecrire dans un fichier
  5. Les instructions include et require
  6. Test n°3

Les variables superglobales

  1. Découverte des variables superglobales
  2. Les cookies
  3. Les sessions
  4. Test n°4

Les expressions régulières et PHP

  1. Découverte des regex
  2. Les fonctions PHP PCRE
  3. Quantifieurs et options
  4. Classes de caractères
  5. Test n°5

L'orienté objet en PHP

  1. Classes, instances et objets
  2. Propriétés et méthodes
  3. Extension de classe et héritage
  4. Le principe d'encapsulation
  5. La méthode constructeur
  6. L'opérateur de résolution de portée et la surcharge
  7. Constantes, méthodes et propriétés statiques
  8. Les classes et méthodes abstraites
  9. Les interfaces
  10. Les méthodes magiques
  11. Le chainage de méthodes
  12. Test n°6

Notions avancées en POO

  1. Le typage explicite
  2. Les traits
  3. Les closures et les classes anonymes
  4. L'auto-chargement des classes
  5. Le mot clef final
  6. Résolution statique à la volée
  7. Parcourir des objets
  8. Le clonage d'objets
  9. Comparaison d'objets
  10. Test n°7

Filtres, erreurs et exceptions

  1. Introduction aux filtres
  2. Utilisation pratique des filtres
  3. Gérer les erreurs en PHP
  4. Gérer les exceptions en PHP

LES EXCEPTIONS EN PHP

Les exceptions en PHP 5 : une nouvelle façon orientée objet de gérer certaines erreurs

Le PHP 5 a introduit une nouvelle façon de gérer certaines erreurs en utilisant l’orienté objet.

Très simplement, on appelle ce type d’erreurs qu’on va pouvoir gérer en utilisant l’orienté objet des exceptions.

Les exceptions correspondent donc à un type précis d’erreurs qu’on va pouvoir lancer (throw) et attraper (catch).

Localiser, lancer et capturer une exception

Pour gérer une exception, nous allons généralement nous servir de deux blocs throw et catch.

Le premier bloc throw va servir de déclencheur : dans le cas où une exception a été rencontrée, on va la « lancer » c’est-à-dire instancier la classe PHP prête à l’emploi Exception.

Le second bloc, catch, va nous permettre de capturer notre exception et de créer un objet qui va contenir les informations relatives à l’erreur levée.

Généralement, on utilisera également dans notre code un bloc try qui va nous permettre de faciliter la capture d’exceptions potentielles.

La fonction qui peut poser problème doit se trouver à l’intérieur de ce bloc try.

Dans le cas où aucune exception n’est rencontrée, le code s’exécutera normalement. Dans le cas contraire (si une exception se déclenche), notre script lancera une exception. Dès qu’une exception est lancée, le PHP va chercher dans notre script le premier bloc catch pour l’exécuter. Si aucun bloc catch n’est trouvé, une erreur fatale sera renvoyée à moins qu’un gestionnaire d’erreur personnalisé ait été défini avec la fonction set_exception_handler().

Gérer une exception en pratique

Prenons immédiatement un exemple simple afin de voir comme gérer une exception en pratique en utilisant nos blocs try, throw et catch.

Par exemple, imaginons que l’on définisse une fonction qui divise deux nombres entre eux. Comme vous le savez, on ne peut pas diviser un nombre par zéro. Si on tente de le faire, une erreur sera renvoyée par le PHP. Nous allons justement lancer une exception pour gérer ce cas particulier.

Définition de blocs try, throw et catch pour gérer une exception en PHP

On gère notre erreur en PHP en lançant une exception à partir de la classe Exception et en la capturant ensuite

Dans cet exemple, on crée une fonction division() dont le rôle est de diviser un nombre par un autre.

Un cas ici va poser problème : le cas de la division par zéro. Comme vous le savez, on ne peut pas diviser par zéro et le PHP renverra automatiquement une erreur si on tente de faire cela.

Pour gérer ce cas exceptionnel, on va utiliser les exceptions.

Dans le cas où on tente de diviser par zéro, notre fonction va lancer (throw) une nouvelle exception, c’est-à-dire instancier notre classe exception. Dans tous les autres cas, elle va renvoyer le résultat de la division.

On va placer les différents appels à la fonction dans un bloc try, qui nous sert à tester la bonne exécution de notre fonction ainsi qu’à la capture d’une éventuelle exception.

Finalement, il nous faut absolument créer un bloc catch afin de capturer les exceptions éventuelles.

Si aucune exception n’est levée durant l’exécution du script, ce bloc ne sera pas exécutée. En revanche, si une exception est lancée, alors ce bloc va nous servir à la capturer c’est-à-dire à créer un objet dans lequel on stocke notre instance de la classe Exception.

Ici, j’ai appelé cet objet $e par convention (« e » pour « exception » ou « erreur »).

Notre bloc catch va également se charger de renvoyer le message prédéfini lorsqu’on a instancié notre classe Exception. On va faire cela en utilisant la fonction getMessage() qui est une fonction prédéfinie en PHP servant à récupérer les messages relatifs à une exception.

Retenez donc bien cette syntaxe très commune en PHP de gestion des exceptions en trois blocs throw, try et catch.

Un quatrième bloc : le bloc finally

Depuis le PHP 5.5, on va également pouvoir utiliser un quatrième bloc pour gérer nos exceptions : le bloc finally.

On va pouvoir spécifier ce bloc soit à la place, soit à la suite du bloc catch.

Notez déjà que le code présent à l’intérieur de ce bloc va toujours s’exécuter même si aucune exception n’a été lancée.

Le grand intérêt de ce dernier bloc est qu’il va être exécuté avant que le PHP retourne à l’exécution du reste du script (c’est-à-dire avant qu’il sorte des blocs try/catch). Cette information va pouvoir servir dans le cas d’exceptions non gérées, afin d’éviter de polluer le reste du script même si je conçois que ce genre d’usage est très précis.

Pour le moment, contentons-nous d’un exemple simple afin de voir le syntaxe de ce dernier bloc et son fonctionnement :

On définit un bloc finally pour gérer nos exceptoins en PHP

Exemple simple d'utilisation d'un bloc finally dans la gestion d'exceptions en PHP

La gestion des erreurs en PHP 7

La récente version PHP 7 bouscule la façon dont la plupart des erreurs étaient gérées auparavant en PHP.

En effet, à la place d’une résolution classique des erreurs, on va dorénavant souvent utiliser la classe PHP Error de la même manière qu’on utilisait la classe Exception pour gérer les exceptions.

Notez que les classes Error et Exception sont indépendantes et n’héritent en rien l’une de l’autre. Cependant, ces deux classes appartiennent à l’interface Throwable qui est l’interface incontournable pour chaque type d’objet qui peut être lancé (throw) comme les erreurs et les exceptions.

Passons en revue les différentes méthodes de cette interface que l’on va pouvoir utiliser :

Les méthodes de l'interface Throwable en PHP objet

L'interface Throwable est à la base de la définition d'objets qu'on va pouvoir lancer

Ce type d’écriture et d’approche des erreurs est très nouveau pour tous. Il faudra certainement attendre quelques mois voire années avant que le PHP définisse précisément cette nouvelle approche de gestion et nous donne tous les outils pour pouvoir travailler précisément.

Chapitre précédent