Page 1 sur 1
Création d'une fonction
Posté : 25 juin 2019, 15:43
par hars
Bonjour à tous et toutes
Je suis en train d'apprendre le PHP et j'en suis aujourd'hui au niveau des Fonctions.
Ne trouvant pas d'exercices en fonction des différents cours que je suis, je me fais mes propres exercices.
Code : Tout sélectionner
<?php
$p=["toto", "tutu", "titi", "tata", "tete"];
function toto($p) { //création de la fonction
echo "Salut ".$p[$i]. " !<br>"; //Ce que fait la fonction
}
for ($i=0;$i<=4;$i++) { //Boucle FOR
toto($p); //Appel de la fonction
}
?>
J'ai créé ma fonction
toto avec comme paramètre, une variable nommée
$p.
Cette variable est un tableau avec plusieurs noms.
Je souhaite donc afficher avec la
fonction boucle FOR, la totalité des noms du tableau.
Je ne comprends pas les erreurs obtenues en ligne 6.
Merci d'avance pour votre aide

Re: Création d'une fonction
Posté : 25 juin 2019, 16:05
par or 1
dans la fonction $i n'existe pas.
il serait plus logique que le paramètre passé à la fonction soit une chaine. et ce serait mieux de donner un nom explicite à la fonction, salut() par exemple.
Re: Création d'une fonction
Posté : 25 juin 2019, 16:11
par hars
Merci, mais si j'ai bien compris le cours (
https://www.pierre-giraud.com/php-mysql ... ctions.php), lors de la création d'un fonction, le paramètre n'est pas encore connu.
"C’est seulement lorsqu’on appelle la fonction pour l’exécuter qu’il faut alors passer les valeurs effectives en arguments de notre fonction." (Pierre Giraud).
Il me semble que c'est ce que je fais, non ?
Je reprends alors...
Code : Tout sélectionner
<?php
$prenom=["toto", "tutu", "titi", "tata", "tete"];
function fonct($prenom) { //création de la fonction
echo "Salut ".$prenom[$i]. " !<br>"; //Ce que fait la fonction
}
for ($i=0;$i<=4;$i++) { //Boucle FOR
fonct($prenom); //Appel de la fonction
}
?>
Re: Création d'une fonction
Posté : 25 juin 2019, 16:15
par or 1
si $i existait, le code fonctionnerait, voir
https://www.php.net/manual/fr/language. ... .scope.php
mais ne pas pouvoir faire :
toto("paul");
est dommage.
Re: Création d'une fonction
Posté : 25 juin 2019, 16:20
par hars
Merci pour les infos du lien qui ne sont pas négligeables
C'est pas que cela est ou pas pas dommage/possible, c'est simplement un exercice que je me fais pour bien comprendre le fonctionnement de la création de fonction.
"C’est seulement lorsqu’on appelle la fonction pour l’exécuter qu’il faut alors passer les valeurs effectives en arguments de notre fonction." (Pierre Giraud).
$i est bien créé via la boucle FOR, donc avant l'appel de la fonction, non ?
Re: Création d'une fonction
Posté : 25 juin 2019, 16:26
par or 1
la fonction sert à dire hello à un prénom. la logique veux donc que ce soit un prénom qui soit passé en paramètre. ainsi on peut faire :
for ($i=0;$i<=4;$i++) { //Boucle FOR
fonct(...); //Appel de la fonction
}
et
fonct("newbie");
et
$s = "pierre";
fonct($s);
et
fonct($_GET["prenom"]);
...
fonct n'est pas un nom explicite de fonction. quand il y aura une seconde fonction, la seconde fonction ne pourra pas s’appeler aussi fonct().
Re: Création d'une fonction
Posté : 25 juin 2019, 16:33
par Saian
Salut $i est bien renseigné via la boucle mais est inconnu dans la fonction.
C'est une question de portée des variables.
https://www.php.net/manual/fr/language. ... .scope.php
Re: Création d'une fonction
Posté : 25 juin 2019, 16:37
par hars
Merci pour vos conseils.
J'ai modifié le code comme ceci, mais il y a toujours une erreur dans l'appel de la fonction, alors que le résultat est tout à fait celui attendu (effectivement, il y avait un pb de portée de variable) :
Pourquoi cette erreur si la fonction fonctionne ?
Code : Tout sélectionner
<?php
function fonct($prenom) {
global $prenom, $i;
$prenom=["toto", "tutu", "titi", "tata", "tete"];
echo "Salut ".$prenom[$i]. " !<br>";
}
for ($i=0;$i<=4;$i++) {
fonct($prenom);
}
?>
Voilà ce que j'obtiens :
( ! ) Notice: Undefined variable: prenom in C:\UwAmp\www\toto.php on line 11
Call Stack
# Time Memory Function Location
1 0.0156 355392 {main}( ) ...\toto.php:0
Salut toto !
Salut tutu !
Salut titi !
Salut tata !
Salut tete !
Re: Création d'une fonction
Posté : 25 juin 2019, 16:48
par Spols
Ce n'est pas du tout la bonne manière de procéder.
le mot clé global peut être très utile, mais dans de rare cas particulier.
il est possible de passer plusieurs arguments à une fonction, donc dans ta logique tu pourrais passer $prenom et $i à ta fonction qui pourra alors déterminer $prenom[$i] qui est la chaine de caractère que tu cherche à agrémenter d'un 'salut '
Je rejoins les autres posteurs sur la conception de ton code mais passons si c'est un exercice.
<?php
$prenom=["toto", "tutu", "titi", "tata", "tete"];
function fonct($prenom, $i) {
echo "Salut ".$prenom[$i]. " !<br>";
}
for ($i=0;$i<=4;$i++) {
fonct($prenom, $i);
}
?>
Re: Création d'une fonction
Posté : 25 juin 2019, 16:52
par hars
J'ai enfin trouvé grâce à votre aide !
Code : Tout sélectionner
<?php
function fonct($prenom) {
global $prenom, $i;
$prenom=["toto", "tutu", "titi", "tata", "tete"];
echo "Salut ".$prenom[$i]. " !<br>";
}
$prenom=["toto", "tutu", "titi", "tata", "tete"];
for ($i=0;$i<=4;$i++) {
fonct($prenom);
}
?>
J'ai dû déclarer 2 fois la variables
prenom, une fois dans la fonction et une fois avant la boucle FOR.
Vous m'avez appris qu'une variable pouvait avoir une certaine portée et je vous en remercie.

Re: [RESOLU] Création d'une fonction
Posté : 25 juin 2019, 16:55
par or 1
code qui marche mais qui est horrible.
et j'insiste, ne pas pouvoir faire
fonct("newbie");
et
$s = "pierre";
fonct($s);
est très mauvais.
Re: [RESOLU] Création d'une fonction
Posté : 25 juin 2019, 16:56
par Saian
Voilà plusieurs formes fonctionnelles de fonctions avec utilisation cohérente des boucles et du global :
function hello1($prenom) {
echo "Salut $prenom !<br>";
}
function hello2($prenoms, $i) {
echo 'Salut '.$prenoms[$i].' !<br>';
}
function hello3() {
global $prenoms, $i;
echo 'Salut '.$prenoms[$i].' !<br>';
}
$prenoms = ["toto", "tutu", "titi", "tata", "tete"];
foreach ($prenoms as $prenom)
hello1($prenom);
for ($i = 0; $i < count($prenoms); $i++) {
hello1($prenoms[$i]);
hello2($prenoms, $i);
hello3();
}
Le global sert à pointer des variables définies dans le contexte global depuis un contexte restreint (intérieur d'une fonction ou d'une méthode d'objet).
Re: [RESOLU] Création d'une fonction
Posté : 25 juin 2019, 17:06
par or 1
voir même
function hello1($prenom) {
echo "Salut $prenom !<br>";
}
function hello2($prenoms, $i) {
hello1($prenoms[$i]);
}
function hello3() {
global $prenoms, $i;
hello1($prenoms[$i]);
}
pour ne pas avoir à changer le code à 3 endroits pour par exemple mettre le prénom entre <b> et </b>
Re: [RESOLU] Création d'une fonction
Posté : 25 juin 2019, 17:09
par hars
Merci pour vos retours.
J'en prends note et j'appliquerai vos conseils à l'avenir
