Les fonctions PHP

PHP c'est une bibliothèque de fonctions impressionnante.
Grâce à ces fonctions prédéfinies le travaile du développeur est simplifiée.
Attention les fonctions prédéfinies sont regroupées en modules. Tous les modules ne sont pas forcément installés sur le serveur ...

Dans le premier chapitre PHP je vous ai montré que grâce à la fonction date() c'était un jeu d'enfant d'afficher l'instant présent dans une page.

Etude plus approfondie de la fonction date

Code de la partie BODY de la page :

<h3> <?php echo "affichage détail instant présent : " . "<br>" ; echo "date courante en anglais : " . date("M - D - d - y"). "<br>"; echo "date courante au format français : " . date("d / m / Y"). "<br>"; echo "heure au format 24 : " . date("H:i"). "<br>"; echo "heure au format 12 : ". date("h:i"). "<br>"; ?> </h3>

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.

Mais attention l'heure locale est fonction de la situation géographique du serveur en lui-même. En effet un serveur situé aux USA vous donnera l'heure courante aux "States" ...
Essayez ce code !

Quelques fonctions prédéfinies utiles

Il y a plusieurs centaines de fonctions prédéfinies ...

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.

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 réel.

empty(variable)

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

Exemple

Le code PHP :

... <h3> <?php $variable ='Merlin l\'enchanteur' ; if(isset($variable)) echo "variable définie !<br>"; if(is_string($variable)) echo "variable chaîne !<br>"; $variable =314 ; if(is_numeric($variable)) echo "variable numérique ! <br>"; if(is_int($variable)) echo "contient un entier ! <br>"; if(is_float($variable)) echo "contient un réel !<br>"; if(!is_float($variable)) echo "ne contient pas un réel !<br>"; $variable =0; if(empty($variable)) echo "variable désormais vide !<br>"; unset($variable); if(!isset($variable)) echo "variable désormais non définie !<br>"; ?> </h3> ...

$variable ='Merlin l\'enchanteur' ;
On peut insérer un guillemet simple 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 l'apostrophe.

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 un réel.
!isset() veut dire "not is isset" et retourne true si la variable n'est pas définie.
etc.

La fonction unset(variable) permet de supprimer une variable.
Testez ce code !

Fonctions pour manipuler les chaînes

strlen(chaîne)

Cette fonction retourne la longueur de cette chaîne.

strtolower(chaîne)

Cette fonction convertit la chaîne en minuscules.

strltoupper(chaîne)

Cette fonction convertit la chaîne en majuscules.

str_shuffle(chaîne)

Cette fonction "crypte" la chaîne en mélangeant les caractères qui la compose.

addslashes(chaîne)

Cette fonction é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 (voir le chapitre "Site avec base de données".

htmlentities(chaîne)

Cette fonction remplace dans une chaîne les lettres accentuées par l'entité de caractère correspondante. Par exemple é est remplacée par & eacute; et è par & egrave;
Là encore il est légitime que vous vous disiez : quel est l'intérêt ???

Vous verrez dans le chapitre "site avec base de données" que dans le cadre de la saisie d'un texte long (destiné à être stocké dans un champ d'une table) il est préférable de convertir les lettres accentuées en entités de caractère et d'échapper les guillemets

Exemple

Le code PHP :

... <form action = "#" method ='get'> <label>Tapez votre nom : </label> <input type = "text" required placeholder = "En minuscules" name ='nom' pattern ='[a-z\ ] {1,20}'> <label>Tapez votre prénom :</label> <input type = "text" required pattern ='[A-Z\ ]{1,20}' placeholder = 'En majuscules' name ='prenom'> <label></label><button type = 'submit'>Validez</button> </form> <h3> <?php if (isset($_GET['nom'])) { $nom = strtoupper($_GET['nom']); $prenom = strtolower($_GET['prenom']); $longueur = strlen($nom.$prenom) ; $nom_prenom = $nom . " " . $prenom ; $idendite_codee = str_shuffle($nom_prenom); echo "nom et prenom : " . $nom_prenom . "<br>" ; echo "idendité codée : " . $idendite_codee . "<br>" ; if ($longueur >= 20) echo "beaucoup de lettres !" else echo "peu de lettres !" ; } else echo "Il faut renseigner le formulaire !" ; ?> </h3> ...

Notez l'emploi du HTML5 dans le formulaire avec les attributs required, placeholder, pattern.
Donc la soumission de champs vides ou remplis avec des données invalides est impossible !

Dans le premier champ on ne peut saisir que des lettres minuscules ou des espaces ([a-z\ ]).
Dans le deuxième champ on ne peut saisir que des lettres majuscules ou des espaces ([A-Z\ ]).

Pour le code PHP vous devez maintenant comprendre le test if (isset($_GET['nom'])) : effectuer le traitement PHP uniquement si il y a eu soumission donc si la variable $_GET['nom'] existe.
Testez ce code !

Créer et utiliser ses propres fonctions

Vous ne trouverez pas dans la liste impressionnante des fonctions prédéfinies PHP une fonction pour obtenir la circonférence et la surface d'un cercle à partir de son rayon !
Mais pas de problème ; la définition d'une fonction personnelle est facile.

Le code de la page (partie BODY)

<body> <form method ="post" action ="#" > <label>Tapez le rayon</label> <input type ="text" name ="rayon" required pattern ="[0,9]{1,2}" maxlength ="2" onchange ="this.form.submit()" > </form> <h3> <?php if (isset($_POST['rayon'])) { $rayon = $_POST['rayon']; // appel fonction fcercle fcercle($rayon); } else echo "Renseignez le formulaire" . "<br>"; // description fonction fcercle function fcercle($rayon) { $PI = 3.14 ; $circonference = $rayon *2 * $PI ; $aire = $rayon *$rayon * $PI ; echo "circonference = " . $circonference . "<br>"; echo "aire = " . $aire . "<br>"; } ?> </h3>

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.
Ladite soumission est effectuée via Javascript (et non pas par un bouton de type submit). C'est une technique pour saisir très vite des données.

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 :
fcercle($rayon);
Testez ce code !

Essayez de saisir une chaîne de caractères telle "aa" dans le champ.
Et oui c'est possible et naturellement le programme PHP retourne alors 0 tant pour la circonférence que pour la surface.

Les contrôles de saisie HTML5 (attributs pattern et required) ne sont en effet effectifs que si la soumission des données est effectuée avec un bouton de type submit. Or ici la soumission est réalisée ici avec la fonction submit de javascript donc les deux attributs ne servent à rien !

Débuggage

Puisque le contrôle HTML n'est pas disponible il faut créer un contrôle de saisie en PHP !

Le code de la version débuggée :

... if (isset($_POST['rayon']) && is_numeric($_POST['rayon'])) ... } else echo "Renseignez le champ avec un nombre entier" . "<br>";

L'instruction if est argumentée avec une condition complexe.
Les deux éléments de la condition complexe sont bâtis sur une fonction PHP et reliées par un opérateur logique. J'aurai l'occasion d'y revenir dans le chapitre sur les structures de contrôle en PHP. Testez la version débuggée!

Saisissez une chaîne dans le champ et observez !

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 qui pourra alors utiliser ce résultat pour d'autres traitements.
Il suffit d'utiliser dans la fonction un instruction basée sur le mot clé return.
Donc l'appel de la fonction vaut traitement et affichage du résultat.
Attention une fonction ne peut retourner qu'une valeur.

Le code HTML et CSS est inchangé.

Comme une fonction ne peut retourner qu'une valeur il faut deux fonctions : une qui retourne la circonférence à partir du rayon et une autre qui retourne la surface.

Ci-dessous le nouveau code PHP :

<?php if (isset($_POST['rayon']) && is_numeric($_POST['rayon'])) { $rayon = $_POST['rayon']; // appel des fonctions echo "circonférence du cercle : " .fcirconference($rayon). "<br>"; echo "surface du cercle : " .fsurface($rayon). "<br>"; $diametre = fcirconference($rayon) /3.14; echo "donc le diamètre du cercle est : " . $diametre; } else echo "Renseignez le champ avec un nombre entier" . "<br>"; // description de deux fonctions function fcirconference($rayon) { $circonference = $rayon *2 * 3.14 ; return $circonference; } function fsurface($rayon) { $surface = $rayon *$rayon * 3.14; return $surface;} ?>

L'affichage des résultats se fait désormais dans le programme principal par le simple appel des fonctions.
Pour vous montrer qu'une donnée renvoyée par une fonction peut être manipulée dans le programme principal j'utilise la circonférence pour calculer le diamètre du cercle : $diametre = fcirconference($rayon) /3.14; Testez le code PHP ci-dessus !
Retour menu