Variable Scope
Fait partie de la section Fondamentaux du Journey PHP de Coddy — leçon 67 sur 71.
Les variables créées à l'intérieur d'une fonction sont complètement séparées des variables à l'extérieur. Ce concept s'appelle variable scope, et le comprendre permet d'éviter des bugs confus dans votre code.
Une variable définie à l'intérieur d'une fonction n'existe que dans cette fonction. Elle est appelée une variable locale :
<?php
function sayHi() {
$message = "Hello!";
echo $message;
}
sayHi();
echo $message; // Error: $message doesn't exist here
?>La variable $message est créée à l'intérieur de sayHi() et disparaît lorsque la fonction se termine. Essayer d'y accéder en dehors provoque une erreur.
De même, les variables définies en dehors d'une fonction ne sont pas automatiquement disponibles à l'intérieur de celle-ci :
<?php
$name = "Alice";
function greet() {
echo $name; // Erreur : $name n'est pas défini à l'intérieur de cette fonction
}
greet();
?>Même si $name existe dans le code principal, la fonction ne peut pas le voir. Pour utiliser des valeurs externes dans une fonction, passez-les en tant que paramètres—c'est l'approche propre et recommandée que vous avez déjà apprise.
Cette séparation est en fait utile. Cela signifie que les fonctions ne modifieront pas accidentellement des variables dans d'autres parties de votre programme, rendant votre code plus prévisible et plus facile à déboguer.
Défi
FacileLisez deux lignes d'entrée :
- Le nom d'une personne (par exemple,
Alice) - Un montant de bonus sous forme de nombre entier (par exemple,
50)
Créez une fonction appelée calculateBonus qui accepte deux paramètres : $name (chaîne) et $bonus (entier).
À l'intérieur de la fonction :
- Créez une variable locale
$baseSalaryet assignez-lui la valeur1000 - Calculez la rémunération totale en ajoutant
$baseSalaryet$bonus - Retournez une chaîne au format :
[name] earns [total]
Appelez la fonction avec les valeurs d'entrée et affichez le résultat retourné.
Exemple 1 :
Si les entrées sont Alice et 50, la sortie devrait être :
Alice earns 1050Exemple 2 :
Si les entrées sont Bob et 200, la sortie devrait être :
Bob earns 1200Exemple 3 :
Si les entrées sont Emma et 0, la sortie devrait être :
Emma earns 1000Aide-mémoire
Les variables créées à l'intérieur d'une fonction sont des variables locales et n'existent que dans cette fonction. Ce concept s'appelle portée des variables.
Une variable définie à l'intérieur d'une fonction ne peut pas être accédée en dehors d'elle :
<?php
function sayHi() {
$message = "Hello!";
echo $message;
}
sayHi();
echo $message; // Erreur : $message n'existe pas ici
?>De même, les variables définies en dehors d'une fonction ne sont pas automatiquement disponibles à l'intérieur d'elle :
<?php
$name = "Alice";
function greet() {
echo $name; // Erreur : $name n'est pas définie à l'intérieur de cette fonction
}
greet();
?>Pour utiliser des valeurs extérieures dans une fonction, passez-les en tant que paramètres.
Essayez vous-même
<?php
// Lire l'entrée
$name = trim(fgets(STDIN));
$bonus = intval(fgets(STDIN));
// TODO: Créer la fonction calculateBonus ci-dessous
// - Elle devrait accepter $name (string) et $bonus (int) comme paramètres
// - Créer une variable locale $baseSalary définie à 1000
// - Calculer la rémunération totale et retourner "[name] earns [total]"
// Appeler la fonction et imprimer le résultat
echo calculateBonus($name, $bonus);
?>Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
4Comparison & Logical Operators
Comparison OperatorsEquality & IdentityLogical Operators Part 1Logical Operators Part 2Recap - Simple Logic2Variables and Data Types
NumbersStrings and QuotesBooleansNaming ConventionsRecap - Variable InitEmpty VariablesString ConcatenationGetting User InputCast to Different Types5Conditional Logic
If StatementIf - ElseThe Ternary OperatorNull Coalescing OperatorSwitch StatementRecap - Making Decisions3Basic Operators
Arithmetic OperatorsModulo OperatorExponentiation OperatorCombined AssignmentIncrement/DecrementOperator PrecedenceRecap - Simple CalculationsString Operators