Accueil

Traduction

Débuter en programmation web - sommaire

Débuter en programmation web - recherche

L'auteur : Patrick Darcheville

Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site

Les fonctions en PHP

PHP propose une bibliothèque de fonctions natives (ou prédéfinies) impressionnante.
Grâce à ces fonctions prédéfinies le travail du développeur est considérablement simplifié.
Avant de vous lancez dans le développement laborieux d'une fonction personnelle complexe, cherchez dans la documentation pour que vous ne "réinventiez pas la roue".

Etude plus approfondie de la fonction date

Je reviens sur la fonction date() déjà évoquée dans le premier chapitre du tuto PHP.

Exemple : le code

date_default_timezone_set('Europe/Paris') : sinon la fonction date() retourne l'heure pour le serveur.

Attention les arguments de la fonction date() sont sensibles à la casse.

Ainsi H affiche l'heure courante au format 24 alors que h affiche l'heure courante au format 12.
M affiche le nom du mois en anglais (3 premières lettres) alors que m affiche le rang du mois.
D affiche le nom du jour en anglais (3 premières lettres) alors que d affiche le rang du jour dans le mois.
Y affiche l'année sur 4 chiffres alors que y affiche l'année sur 2 chiffres.

Le rendu

Quelques fonctions prédéfinies utiles

Il y a plusieurs centaines de fonctions prédéfinies ...
Citons les principales !

Fonctions d'informations sur les variables

Il s'agit de fonctions qui retournent une valeur logique (true ou false).

isset(variable)

Cette fonction retourne true si la variable existe.
Fonction très utile lorsque le formulaire de soumission et le traitement PHP sont dans la même page.
Le traitement PHP ne doit s'effectuer que si soumission.

if(isset($_POST['soumission'] 
{
	// traitement PHP 
}
else echo "Renseignez le formulaire"; 

À défaut de ce test, des message d'erreurs apparaissent avant la soumission.

is_string(variable)

Retourne true si la variable contient une chaîne.

is_numeric(variable)

Retourne true si la variable contient un nombre.

is_int(variable)

Retourne true si la variable contient un entier.

is_float(variable)

Retourne true si la variable contient un nombre décimal.

empty(variable)

Retourne true si la variable est vide (zéro) ou chaîne vide.

Exemple - le code

Ci-dessous un script qui utilise toutes ces fonctions.

Je veux afficher tantôt le contenu de la variable et tantôt son nom aussi la chaine qui suit echo est tantôt délimitée par des guillemets simples et tantôt par des guillemets doubles.

$variable ='Merlin l\'enchanteur' ;
On peut insérer un apostrophe dans une chaîne délimitée par des guillemets simples à condition d'échapper ce caractère c'està dire d'écrire \'. On aurait pu aussi délimiter la chaîne avec des guillemets doubles pour ne pas devoir échapper.

Pour chaque fonction on peut construire la fonction inverse en faisant précéder du caractère ! (différent).
Donc !is_float() veut dire "not is float" et retourne true si le contenu n'est pas décimal.
!isset() veut dire "not is isset" et retourne true si la variable n'existe pas.

La fonction unset(variable) permet de supprimer une variable.

Le rendu

Fonctions pour manipuler les chaînes

Liste non exhaustive

strlen(chaîne) : retourne la longueur de cette chaîne.

strtolower(chaîne) : convertit la chaîne en minuscules.

strltoupper(chaîne) : convertit la chaîne en majuscules.

str_shuffle(chaîne) : crypte la chaîne en mélangeant les caractères qui la compose.

addslashes(chaîne) : échappe les guillemets contenus dans la chaîne. C'est à dire remplace ' par \' et " par \".
Il est logique que vous doutiez pour l'instant de l'intérêt pratique de cette fonction. Or croyez moi elle est très utile.

htmlentities(chaîne) : remplace dans une chaîne les lettres accentuées par l'entité de caractère correspondante mais aussi les chevrons (utilisés en HTML).

La lettre é est remplacée par &eacute; et è par &egrave; Le chevron < est remplacé par &lt; et le chevron > par &gt;

str_replace(exp. cherchée, exp. remplacement, chaine).
Méthode très utile pour supprimer certaines sous-chaines (remplacer par chaine vide).

Intérêt de ces trois dernières fonctions

Il faut injecter dans la base de données des chaines où les guillemets sont échappés et où les parenthèses angulaires ont été remplacées par leur entité de caractère (OU ont été supprimées).
Vous comprendrez les raisons de ces manipulations étranges en lisant le chapitre sur : les requêtes SQL action

Exemple - le code

Une page contenant un formulaire et un script PHP qui utilise certaines des fonctions citées ci-dessus.

Pour le premier champ je convertis les chevrons en entités de caractère.
Pour le deuxième champ je supprime les éventuels chevrons via la méthode str_replace()
Pour les deux champs j'échappe les guillemets simples et doubles.

Le rendu

Testez ce script !

Les fonctions mathématiques

Pour la liste des fonctions je vous renvoie au début de ce chapitre.
Plutôt qu'un long discours des exemples !

Exemple 1 - le code

Les fonctions pi() round(),ceil(), floor().
La fonction round() à 1 ou 2 arguments.

La fonction prédéfinie pi() retourne 3.1415926535898
Notez que les fonctions round(), ceil(), floor() arrondissent à un entier.
Or en gestion il faut toujours arrondi en centimes (donc deux décimales).

Calcul de TVA : j'imagine que le taux de tva est 21% (ou 0.21).
La TVA s'applique au montant hors taxes et doit être arrondie au centime d'euro.
Pour arrondir au centime d'euro, le deuxième argument de la fonction arrondi() doit être 2.

Exemple 1 - le rendu

Exemple 2 - le code

Le deuxième argument de la fonction round() peut être négatif.
La fonction récente (PHP7) intdiv() retourne le quotient de la division entière.

Le deuxième argument est un entier relatif (positif : pour arrondir la partie décimale ou négatif pour arrondir la partie entière.
Pour le reste de la division entière utilisez l'opérateur % (modulo).

Exemple 2 - le rendu

Cryptage

Dans une base de données il est préférable que le mot de passe d'une personne inscrite soit crypté.
Ainsi même si la base est piratée, le pirate ne saura que faire d'un mot de passe crypté ...

Le "hachage" est une technique qui consister à transformer un texte en un nombre hexadécimal.
Le hachage fonctionne en un seul sens ; il est impossible de reconstituer le texte d'origine une fois qu'il a été 'haché'.

Exemple - le code

Pour hacher un texte on peut utiliser la fonction sha1 même si elle a un peu vieilli.
La chaine retournée par la fonction sha1() comprend 40 caractères hexadécimaux (0 à f)
Il existe aussi password_hash()

Exemple - le rendu

Remplissez le formulaire, soumissionnez et observez ce qui est affiché en dessous.

Trouver l'information

Utiliser la documentation officielle de PHP

Avant de vous lancer dans la réalisation d'une fonction personnelle complexe, il est préférable de consulter la documentation PHP.

Tapez avec un moteur de recherche "PHP documentation officielle".
L'URL est : https://www.php.net/manual/fr/index.php
Ensuite utilisez la zone de recherche.
Par exemple, vous avez un tableau indicé avec de nombreux éléments. Vous devez faire des recherche dans ce tableau ; comment programmer ?
Vous pouvez demander la liste des fonctions relatives aux tableaux.

Les fonctions sur les tableaux

Ci-dessous la liste impressionnante de toutes les fonctions relatives aux tableaus (extraits) :

    array — Crée un tableau
    ...
    array_fill — Remplit un tableau avec une même valeur
    array_fill_keys — Remplit un tableau avec des valeurs, en spécifiant les clés
    array_filter — Filtre les éléments d'un tableau grâce à une fonction de rappel
    array_find — Retourne le premier élément validant la fonction de rappel
    ...
    array_key_exists — Vérifie si une clé existe dans un tableau
    array_key_first — Récupère la première clé d'un tableau
    array_key_last — Récupère la dernière clé d'un tableau
    array_keys — Retourne toutes les clés ou un ensemble des clés d'un tableau
    array_last — Gets the last value of an array
    ...
    array_push — Empile un ou plusieurs éléments à la fin d'un tableau
    array_rand — Prend une ou plusieurs clés, au hasard dans un tableau
    ...
    array_replace — Remplace les éléments d'un tableau par ceux d'autres tableaux
    array_reverse — Inverse l'ordre des éléments d'un tableau
    array_search — Recherche dans un tableau la première clé associée à la valeur
    ...
    array_sum — Calcule la somme des valeurs du tableau
	...
    array_walk_recursive — Applique une fonction de rappel récursivement à chaque membre d'un tableau
    arsort — Trie un tableau en ordre décroissant et conserve l'association des index
    asort — Trie un tableau en ordre croissant et conserve l'association des index
    count — Compte tous les éléments d'un tableau ou dans un objet Countable
    current — Retourne l'élément courant du tableau
    each — Retourne chaque paire clé/valeur d'un tableau
    end — Positionne le pointeur de tableau en fin de tableau
	...
    in_array — Indique si une valeur appartient à un tableau
    key — Retourne une clé d'un tableau associatif
    key_exists — Alias de array_key_exists
    krsort — Trie un tableau en fonction des clés en ordre décroissant
    ksort — Trie un tableau en fonction des clés en ordre croissant
    ...
    next — Avance le pointeur interne d'un tableau
    prev — Recule le pointeur courant de tableau
    range — Crée un tableau contenant un intervalle d'éléments
    reset — Remet le pointeur interne de tableau au début
    rsort — Trie un tableau en ordre décroissant
    shuffle — Mélange les éléments d'un tableau
    sizeof — Alias de count
    sort — Trie un tableau en ordre croissant
    uasort — Trie un tableau en utilisant une fonction de rappel
    uksort — Trie un tableau par ses clés en utilisant une fonction de rappel
    usort — Trie un tableau en utilisant une fonction de comparaison

Utiliser l'IA

La liste ci-dessus est impressionnante mais on est un peu perdu. On voit les limites de cet outil.

Posons à Qwant (moteur de recherche français) la question "PHP + recherche dans un tableau indicé".

La réponse est fort utile (extraits) :

Pour rechercher dans un tableau indicé (indexé numériquement), 
vous pouvez utiliser plusieurs méthodes selon ce que vous cherchez:

    Vérifier si une valeur existe dans le tableau
        in_array($valeur, $tableau): renvoie vrai si la valeur est présente.
        Exemple: if (in_array('Alice', $noms)) { / trouvé / }

    Récupérer la clé (indice) associée à une valeur
        array_search($valeur, $tableau): 
			retourne l’indice de la première occurrence de la valeur
    ...
Exemple pratique:
    $tableau = ['pomme', 'banane', 'orange'];
    $indice = array_search('banane', $tableau); // retourne 1
	$tableau[$indice] ; // retourne 'banane'

L'IA a fait le tri dans toutes les fonctions sur les tableaux.
Je sais maintenant qu'il faut utiliser les fonctions : in_array(), array_search()
Je sais aussi que array_search() doit être argumentée avec la valeur cherchée mais retourne un indice !

Créer et utiliser ses propres fonctions

Il n'existe pas de fonctions prédéfinies pour calculer l'aire et la circonférence d'un cercle à partir du rayon.
Par contre il existe de nombreuses fonctions prédéfinies dans le domaines de la géométrie et en particulier les fonctions trigonométriques.
Mais revenons au calcul de la circonférence et de l'aire d'un cercle ; il faut donc définir deux fonctions et ensuite les appeler.

Exemple - le code

Formulaire de soumission et traitement dans le même document PHP.

Dans le formulaire la méthode d'envoi est POST.
Notez bien que la valeur saisie n'apparaît plus dans la barre d'url après soumission.

Le champ pour saisir le rayon est de type "number".
Grâce à l'attribut step ="any" il est possible de saisir via le clavier un nombre décimal.

Dans le code PHP la fonction fcercle() est définie avec le mot réservé function. l
Cette fonction calcule la circonférence et l'aire du cercle à partir d'un paramètre (le rayon) puis affiche circonférence et rayon.

Dans le programme principal il n'y a plus qu'à appeler la fonction avec passage du rayon en paramètre.

Le rendu

Fonction retournant une valeur

Jusqu'à présent les résultats (circonférence et surface du cercle) sont affichés par la fonction.
Or il est préférable que la fonction retourne une valeur au profit du programme principal ; ce dernier pourra alors utiliser le résultat pour des traitements ultérieurs.
Il suffit d'utiliser dans la fonction un instruction basée sur le mot clé return ; le résultat du traitement est alors retourné au programme principal.

Le code

Il faut ici alors deux fonctions : une qui retourne la circonférence à partir du rayon et une autre qui retourne la surface.

Les données sont soumissionnées avec la méthode GET (il n'y a aucun problème de confidentialité).
Notez bien le mot clé "return" dans chacune des deux fonctions.

L'affichage des résultats se fait désormais dans le programme principal.

Le rendu

N'hésitez pas à saisir (via le clavier) un nombre décimal.