Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. PHP 8
  3. Écrire des fonctions et des classes PHP
Extrait - PHP 8 Développez un site web dynamique et interactif (2e édition)
Extraits du livre
PHP 8 Développez un site web dynamique et interactif (2e édition) Revenir à la page d'achat du livre

Écrire des fonctions et des classes PHP

Fonctions

1. Introduction

À l’instar des différents langages de développement, PHP offre la possibilité de définir ses propres fonctions (appelées fonctions "utilisateur") avec tous les avantages associés (modularité, capitalisation...). Une fonction est un ensemble d’instructions identifiées par un nom, dont l’exécution retourne une valeur et dont l’appel peut être utilisé comme opérande dans une expression. Une procédure est un ensemble d’instructions identifiées par un nom qui peut être appelé comme une instruction.

2. Déclaration et appel

Le mot-clé function permet d’introduire la définition d’une fonction.

Syntaxe

function nom_fonction([paramètre]) [: type]{ 
  instructions; 
} 

nom_fonction

Nom de la fonction (doit respecter les règles de nommage présentées dans le chapitre Introduction à PHP - Structure de base d’une page PHP). Ce nom n’est pas sensible à la casse (pour PHP, les fonctions unefonction et UneFonction sont les mêmes).

paramètre

Paramètres éventuels de la fonction exprimés sous forme d’une liste de variables (cf. section Fonctions - Paramètres) : $paramètre1, $paramètre2, ...

type

Déclaration du type de données retourné par la fonction. Valeurs possibles : int, float, string, bool, array, callable, iterable, object, mixed, void, true, false, null, un nom de classe ou d’interface (cf. dans ce chapitre la section Classes), ou une union de types ou une intersection de types. Le nom du type peut être précédé d’un point d’interrogation (?) qui indique que la fonction peut retourner une valeur NULL, sauf pour les types suivants : void, never, null (déjà NULL), mixed (déjà inclus), union de types (le type null peut être ajouté dans l’union) et intersection de types. Voir le chapitre Introduction à PHP pour la définition des types de données et la version à partir de laquelle certains d’entre eux sont utilisables (cf. section Les bases du langage PHP - Types de données).

instructions

Ensemble des instructions qui composent la fonction.

Le nom de la fonction...

Classes

1. Concept

PHP propose des fonctionnalités classiques de programmation orientée objet :

  • définition de classe

  • utilisation de méthodes constructeur et destructeur

  • notions de propriété ou de méthode public, privé, protégé

  • héritage

  • notions de classe ou méthode abstraite, de classe ou méthode finale, d’interface, de propriété ou méthode statique (de classe)

  • exceptions

  • attributs (similaire aux concepts d’annotation en Java ou de décorateurs en Python ou en JavaScript, apparu en version 8, non présenté dans cet ouvrage)

Une classe est un type composite regroupant des variables (appelées propriétés ou attributs de la classe) et des fonctions (appelées méthodes de la classe). En soi, une classe ne contient pas de données ; c’est juste un modèle, une définition.

À partir de la classe, il est possible de définir ("instancier") des objets qui ont la structure de la classe et qui, eux, contiennent des données.

Dans cette section, nous allons présenter les fonctionnalités de base les plus couramment utilisées : c’est une introduction pratique aux fonctionnalités objet de PHP. Pour plus d’informations, reportez-vous à la documentation de PHP.

2. Définir une classe

Le mot-clé class permet d’introduire la définition d’une classe.

Syntaxe

[readonly] class nom_classe { 
 // définition des propriétés 
 [ 
 public | private | protected [type [readonly]] $propriété [= expression]; 
 ... 
 ] 
 // définition des méthodes 
 [ 
 [public | private | protected] function méthode() { 
 ... 
 } 
 ... 
 ] 
} 

nom_classe

Nom de la classe (doit respecter les règles de nommage présentées dans le chapitre Introduction à PHP - Structure de base d’une page PHP). Ce nom n’est pas sensible à la casse (pour PHP, les classes uneclasse et UneClasse sont les mêmes).

type

Déclaration du type de données de la propriété. Valeurs possibles :...

Espaces de noms

Les espaces de noms (namespace en anglais) permettent de résoudre deux problèmes fréquemment rencontrés lors de l’utilisation de classes ou de bibliothèques de fonctions :

  • Utilisation d’un même nom (classe, fonction, constante) dans deux bibliothèques.

  • Manipulation de noms particulièrement longs qui rendent le code pénible à écrire.

Un espace de noms est déclaré avec le mot-clé namespace au tout début d’un fichier, avant tout autre code, à l’exception de l’instruction declare qui est autorisée avant (sinon, une erreur fatale se produit).

Exemple

<?php 
// Définition de l'espace de noms. 
namespace MaLibrairie; 
// Définition d'une constante. 
const UN = 1; 
// Définition d'une classe. 
class uneClasse { 
  /* 
  ... 
  */ 
} 
// Définition d'une fonction. 
function uneFonction() { 
  /* 
  ... 
  */ 
} 
?> 

Le même espace de noms peut être défini dans plusieurs fichiers, ce qui permet d’organiser le code dans plusieurs fichiers tout en le regroupant au sein d’un même espace de noms.

Plusieurs espaces de noms peuvent être définis dans un même fichier mais ce n’est pas une bonne pratique de codage.

Un espace de noms peut être défini avec des sous-niveaux en utilisant le séparateur antislash (\) : MaLibrairie\Sous\Niveau.

Par défaut, si aucun espace de noms n’est défini, toutes les définitions (classes, fonctions, constantes) sont placées dans l’espace de noms global.

La constante __NAMESPACE__ donne le nom de l’espace de noms courant (chaîne vide dans l’espace global).

L’espace de noms peut être utilisé pour qualifier un identifiant (constante, fonction, classe) à l’aide du séparateur antislash (\) et préciser ainsi son origine. Le nom qualifié...