Aller au contenu principal

Utilisation de readline()

<?php
// Ce script montre comment demander une saisie à l'utilisateur

$prenom = readline("Quel est votre prénom ? ");
echo "Bonjour $prenom !\n";

Petite vérification​

Avant de commencer, vérifiez si vous êtes capable d'afficher la version de votre PHP, en ligne de commandes ?

Notions théoriques​

Dans la séance précédente, vous avez découvert comment afficher du texte à l'écran avec echo et print. Il est tout aussi utile de pouvoir lire une information saisie par l'utilisateur, directement dans le terminal.

astuce

C'est exactement ce que permet la fonction readline() : elle met le script en pause, affiche éventuellement un message, puis attend que l'utilisateur tape quelque chose au clavier et appuie sur Entrée.

La fonction readline()​

<?php
$reponse = readline("Posez votre question : ");

readline() accepte un paramètre optionnel : un texte affiché juste avant que le curseur n'attende la saisie (on l'appelle une invite, ou prompt en anglais).

<?php
$nom = readline("Votre nom : "); // "Votre nom : " est affiché, puis le script attend
echo "Vous avez saisi : $nom\n";
info

Le paramètre est facultatif : readline() sans argument attend simplement une saisie, sans rien afficher avant.

readline() renvoie toujours une chaîne de caractères​

Quelle que soit la saisie de l'utilisateur (un mot, un nombre, une phrase), readline() renvoie systématiquement une chaîne de caractères (string).

<?php
$age = readline("Quel âge avez-vous ? ");
var_dump($age); // string(2) "20", même si l'utilisateur a tapé 20
attention

Si vous avez besoin d'un nombre pour faire un calcul, vous devez convertir la chaîne saisie avec un transtypage (cast), par exemple (int) ou (float).

<?php
$age = (int) readline("Quel âge avez-vous ? ");
$dansDixAns = $age + 10;
echo "Dans 10 ans, vous aurez $dansDixAns ans.\n";

readline() ne fonctionne qu'en ligne de commande​

readline() est prévue pour un script exécuté en CLI (Command Line Interface), c'est-à-dire lancé depuis un terminal avec la commande php, comme vous l'avez vu dans la séance précédente.

php main.php
danger

readline() ne fonctionne pas dans un script PHP exécuté par un serveur Web (Apache, Nginx...) et affiché dans un navigateur. Il n'y a, dans ce contexte, aucun terminal pour saisir une réponse : on utilise alors les formulaires HTML, que vous découvrirez dans une séance ultérieure.

info

Sur certaines installations de PHP sous Windows, l'extension fournissant readline() n'est pas activée par défaut. Si la fonction n'est pas reconnue sur votre machine, vous pourrez utiliser l'alternative fgets(STDIN), qui sera présentée plus tard dans le cours.

Bien formuler son invite​

Une invite claire évite à l'utilisateur de deviner ce qu'on attend de lui.

<?php
// Peu clair :
$x = readline();

// Clair :
$prenom = readline("Entrez votre prénom : ");
astuce

Terminez votre invite par un espace après le : (par exemple "Votre prénom : "), afin que le texte saisi par l'utilisateur n'apparaisse pas collé au message.

La fonction rand()​

Pour rendre un programme moins prévisible, PHP propose la fonction rand(), qui génère un nombre entier aléatoire.

<?php
$de = rand(1, 6);
echo $de; // Un nombre entier entre 1 et 6 (bornes incluses), différent à chaque exécution

rand() accepte deux paramètres optionnels : une valeur minimale et une valeur maximale. Le nombre renvoyé est toujours compris entre ces deux bornes, bornes incluses.

<?php
$nombreSecret = rand(0, 100); // un entier entre 0 et 100, inclus
astuce

Relancez plusieurs fois le même script : le nombre affiché change à chaque exécution. C'est le principe même du hasard !

info

PHP propose aussi mt_rand(), une version plus rapide de rand(). Depuis PHP 7, les deux fonctions utilisent en réalité le même algorithme en interne : vous pouvez utiliser l'une ou l'autre indifféremment.

Exemple pratique​

<?php
// Ce script demande le prénom et l'âge de l'utilisateur, puis affiche un message

$prenom = readline("Quel est votre prénom ? ");
$age = (int) readline("Quel est votre âge ? ");

echo "Bonjour $prenom, vous avez $age ans.\n";

$anneeNaissanceApprox = 2026 - $age;
echo "Vous êtes donc probablement né(e) vers $anneeNaissanceApprox.\n";
info

Remarquez que $prenom reste une chaîne de caractères (pas besoin de la convertir, on l'affiche telle quelle), alors que $age est converti en entier avec (int) car il sert ensuite dans un calcul.

Test de mémorisation/compréhension​


Que fait la fonction readline() ?


Quel type de valeur readline() renvoie-t-elle, quelle que soit la saisie de l'utilisateur ?


Comment convertir en entier la valeur saisie par l'utilisateur via readline() ?


À quoi sert le paramètre passé entre parenthèses à readline() ?


Dans quel contexte la fonction readline() fonctionne-t-elle ?


Le paramètre de readline() est-il obligatoire ?


Que fait la fonction rand() ?


Comment demander à PHP un nombre aléatoire compris entre 10 et 20 (bornes incluses) ?


Si on exécute rand(1, 6) à chaque lancement d'un même script, obtient-on nécessairement la même valeur ?


TP pour réfléchir et résoudre des problèmes​

Trouver le nombre caché !​

Dans ce TP, l'ordinateur choisit un nombre secret entre 0 et 100 avec rand(). Vous proposez un nombre avec readline(), et le programme vous indique si le nombre secret est plus grand ou plus petit que votre proposition.

  • Dans votre répertoire Documents/tp_readline, créez le fichier devine_nombre.php.
Petit avant-goût

Ce TP utilise une instruction if / elseif / else (une condition), que vous étudierez en détail dans une prochaine séance. Pour l'instant, la structure vous est presque entièrement donnée : contentez-vous de compléter les parties déjà connues.

Étape 1 — Générer le nombre secret​

Ouvrez la balise PHP, puis générez un nombre secret aléatoire entre 0 et 100, et stockez-le dans $nombreSecret.


Bonne pratique - Nommer une variable selon son rôle

$nombreSecret indique clairement, rien qu'à la lecture du nom, que cette variable contient le nombre à deviner. Un nom comme $n obligerait à relire tout le code pour comprendre son rôle.

Étape 2 — Demander une proposition au joueur​

Demandez maintenant au joueur de proposer un nombre entre 0 et 100, en convertissant directement sa saisie en entier.


Bonne pratique - Toujours convertir une saisie numérique

Sans le (int), $proposition resterait une chaîne de caractères, ce qui rendrait la comparaison avec $nombreSecret peu fiable.

Étape 3 — Comparer et donner un indice​

Complétez la comparaison pour indiquer au joueur si le nombre secret est plus grand que sa proposition.

Étape 4 — Exécuter le jeu​

Exécutez votre script plusieurs fois de suite, en testant différentes propositions :

php devine_nombre.php
astuce

Comme rand() choisit un nouveau nombre secret à chaque exécution du script, le nombre à deviner change à chaque nouvelle partie.

📌 Une solution

TP n°2 - Un petit programme d'addition

Dans ce TP, vous allez écrire un script qui demande deux nombres à l'utilisateur, puis affiche leur somme.

  • Dans votre répertoire "Documents", créez le répertoire tp_readline.
  • Dans ce répertoire, créez le fichier addition.php.

Étape 1 — Demander le premier nombre​

Ouvrez la balise PHP, puis demandez à l'utilisateur le premier nombre avec une invite claire, en le convertissant directement en entier.


Bonne pratique - Une invite explicite

Précisez toujours dans l'invite ce que vous attendez de l'utilisateur (ici, "un premier nombre"). Une invite vague comme "Entrez une valeur : " oblige l'utilisateur à deviner.

Étape 2 — Demander le second nombre​

Demandez maintenant le second nombre, de la même façon.


Bonne pratique - Nommer clairement ses variables

$premierNombre et $secondNombre sont plus lisibles que $n1 et $n2 : le code se comprend sans avoir besoin de commentaire supplémentaire.

Étape 3 — Calculer et afficher la somme​

Calculez la somme des deux nombres, puis affichez un message récapitulatif.


Bonne pratique - Toujours convertir avant de calculer

Sans les conversions (int) des étapes précédentes, $somme contiendrait la concaténation des deux chaînes plutôt que leur addition dans certains cas ambigus. Convertir systématiquement les saisies numériques avant un calcul évite ce genre de surprise.

Étape 4 — Exécuter le script​

Exécutez votre script depuis un terminal, et testez-le avec plusieurs valeurs :

php addition.php
📌 Une solution