get_defined_vars()
La fonction get_defined_vars() est une fonction PHP intégrée qui retourne un tableau associatif contenant toutes les variables définies dans la portée actuelle.
Introduction
get_defined_vars() est une fonction PHP intégrée qui retourne un tableau associatif de toutes les variables existant dans la portée où elle est appelée. Les clés du tableau sont les noms des variables (sans le $ initial) et les valeurs sont les valeurs actuelles de ces variables.
L'idée clé à retenir est la notion de portée. Une « portée » est la région du code dans laquelle une variable est visible. PHP possède une portée de fonction (variables à l'intérieur d'une fonction) et la portée globale (variables au niveau supérieur d'un script). get_defined_vars() ne rapporte que ce qui est visible au point exact où vous l'appelez, ce qui en fait un moyen rapide de capturer l'état lors du débogage sans avoir à nommer chaque variable individuellement.
Cette page couvre la syntaxe, ce que la fonction fait et ne fait pas, comment son résultat change selon la portée, et les utilisations les plus courantes en pratique.
Syntaxe
get_defined_vars(): arrayLa fonction ne prend aucun argument et retourne toujours un array. Si aucune variable n'est définie dans la portée actuelle, elle retourne un tableau vide.
Exemple de base
Le cas le plus simple consiste à l'appeler dans la portée globale, juste après avoir défini quelques variables :
<?php
$name = "Ada";
$age = 36;
$colors = ["red", "green"];
print_r(get_defined_vars());
?>Les variables définies par l'utilisateur apparaissent comme clés (ainsi que les superglobales de PHP, expliquées ci-dessous) :
Array
(
[name] => Ada
[age] => 36
[colors] => Array
(
[0] => red
[1] => green
)
...
)La portée est importante : locale vs. globale
C'est ce qui perturbe souvent les développeurs. get_defined_vars() ne voit pas au-delà des frontières de portée. Une fonction ne peut pas voir les variables globales du script à moins qu'elles n'aient été importées (par exemple avec le mot-clé global ou passées en arguments), donc appeler get_defined_vars() à l'intérieur d'une fonction ne rapporte que les variables propres à cette fonction.
À l'intérieur de la fonction, seule la variable locale est visible, donc la sortie est simplement :
Array
(
[var3] => 1
)Les variables globales $var1 et $var2 ne sont pas listées, car elles appartiennent à une portée différente. (true s'affiche comme 1 parce que PHP affiche le boolean true ainsi dans print_r.)
Qu'en est-il des superglobales ?
Une idée reçue fréquente est que get_defined_vars() retourne toujours les superglobales ($_GET, $_POST, $_SERVER, etc.). Ce n'est pas le cas. Les superglobales ne sont retournées que lorsque vous appelez la fonction dans la portée globale, car c'est là qu'elles vivent. À l'intérieur d'une fonction, elles sont accessibles par leur nom mais ne font pas partie de cette portée locale, donc elles n'apparaissent pas dans le résultat ci-dessus. La même règle s'applique à $GLOBALS — il n'est pas inclus dans le tableau retourné.
Cas d'utilisation courants
Vérifier si une variable est définie
Comme le résultat est un simple array, vous pouvez tester l'existence d'une variable avec array_key_exists(). C'est pratique lorsqu'une variable n'est définie que sur certains chemins de code :
<?php
$config = "loaded";
$vars = get_defined_vars();
var_dump(array_key_exists("config", $vars)); // bool(true)
var_dump(array_key_exists("missing", $vars)); // bool(false)
?>Pour vérifier une seule variable connue, isset() est généralement plus clair ; get_defined_vars() brille lorsque vous voulez avoir une vue d'ensemble d'un coup.
Déboguer l'état à l'intérieur d'une fonction
Ajoutez un appel près d'une ligne délicate pour voir toutes les variables locales et leurs valeurs, au lieu d'écrire un var_dump() pour chacune :
<?php
function calculatePrice($base, $taxRate) {
$tax = $base * $taxRate;
$total = $base + $tax;
print_r(get_defined_vars());
return $total;
}
calculatePrice(100, 0.2);
?>L'instantané montre les arguments et chaque variable locale au fil de l'exécution :
Array
(
[base] => 100
[taxRate] => 0.2
[tax] => 20
[total] => 120
)Fonctions associées
| Fonction | Utilisez-la quand vous souhaitez… |
|---|---|
compact() | Construire un array à partir de noms de variables sélectionnés. |
extract() | Faire l'inverse — transformer les clés d'un array en variables. |
isset() | Tester si une variable spécifique est définie et non null. |
Voir aussi La portée des variables pour les règles qui régissent ce que get_defined_vars() peut voir, et Les superglobales PHP pour comprendre pourquoi elles n'apparaissent que dans la portée globale.
Conclusion
get_defined_vars() vous offre un instantané en une ligne de toutes les variables visibles dans la portée actuelle, ce qui en fait un outil de débogage rapide et un moyen simple d'inspecter ou de tester l'état de façon programmatique. La seule règle à garder à l'esprit est la portée : à l'intérieur d'une fonction, vous ne voyez que les variables locales de cette fonction (plus tout ce qui a été explicitement importé), tandis que dans la portée globale vous voyez également les superglobales de PHP. Connaître cette frontière est ce qui rend la fonction prévisible à utiliser.