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.
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";
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
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
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.
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 : ");
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
Relancez plusieurs fois le même script : le nombre affiché change à chaque exécution. C'est le principe même du hasard !
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";
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
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 avecreadline(), 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 fichierdevine_nombre.php.
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.
$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.
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
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.
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.
$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.
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