var_export()
La fonction var_export() produit une représentation valide en PHP d'une variable, pouvant être réutilisée comme code PHP.
Introduction
var_export() est une fonction PHP intégrée qui produit une représentation en code PHP valide d'une variable. Contrairement à un simple print, la chaîne qu'elle renvoie est analysable : vous pourriez la copier dans un fichier .php (ou la passer à eval()) pour obtenir une valeur identique. Cela la rend idéale pour :
- Générer des fichiers de configuration ou de données en cache — écrire l'export sur disque et l'inclure avec
requireultérieurement. - Inspecter la structure exacte d'une variable lors du débogage.
- Capturer des valeurs attendues dans les tests et la documentation.
Cette page couvre la syntaxe, le drapeau $return, la façon dont chaque type de données est rendu, et la différence entre var_export(), var_dump() et print_r().
Syntaxe
var_export(mixed $value, bool $return = false): ?string| Paramètre | Description |
|---|---|
$value | La variable ou expression à exporter. |
$return | Lorsque false (par défaut), la représentation est affichée directement et la fonction retourne null. Lorsque true, la représentation est retournée sous forme de chaîne au lieu d'être affichée. |
L'erreur la plus courante est d'oublier le second argument : $result = var_export($x); laisse $result à null car la sortie est allée directement vers stdout. Pour la capturer, passez true.
Exemple de base
Ici $var1 est un entier, $var2 une chaîne, et $array un tableau indexé. Chaque appel retourne une chaîne qui est elle-même du PHP valide :
10
'Hello, world!'
array (
0 => 'apple',
1 => 'banana',
2 => 'cherry',
)Notez que les chaînes sont entourées de guillemets simples et que les tableaux conservent leurs clés explicites — la sortie d'un tableau pourrait être assignée directement à une variable.
Rendu de chaque type
<?php
var_export(true); echo "\n"; // true
var_export(null); echo "\n"; // NULL
var_export(3.14); echo "\n"; // 3.14
var_export('a'); echo "\n"; // 'a'
$assoc = ['name' => 'Ann', 'age' => 30];
var_export($assoc); echo "\n";
?>Sortie :
true
NULL
3.14
'a'
array (
'name' => 'Ann',
'age' => 30,
)Les booléens deviennent true/false, null devient le NULL en majuscules, et les tableaux associatifs conservent leurs clés de type string — tout est du PHP syntaxiquement valide.
Export d'objets
Pour les objets, var_export() émet un appel __set_state() afin que la structure puisse, en principe, être reconstruite :
<?php
class Point {
public int $x = 1;
public int $y = 2;
}
var_export(new Point());
?>\Point::__set_state(array(
'x' => 1,
'y' => 2,
))Pour reconstruire réellement un tel objet à partir de l'export, la classe doit définir une méthode statique __set_state(). Sans elle, l'évaluation de la sortie génère une erreur — donc pour l'aller-retour d'objets, serialize() est généralement plus adapté.
var_export() vs. var_dump() vs. print_r()
| Fonction | Format de sortie | Affiche les types ? | Retournable en chaîne ? | PHP valide ? |
|---|---|---|---|---|
var_export() | Code PHP analysable | Implicitement | Oui ($return = true) | Oui |
var_dump() | Type + valeur + longueur | Oui (explicite) | Non (affichage uniquement) | Non |
print_r() | Arborescence lisible | Non | Oui (2e argument) | Non |
Utilisez var_export() quand vous avez besoin de code que vous pouvez stocker ou réexécuter, var_dump() quand vous avez besoin des types et des longueurs de chaînes pour le débogage, et print_r() pour un aperçu lisible rapide.
Un usage pratique : fichiers de données en cache
Comme l'export est du PHP valide, vous pouvez persister des données calculées et les charger rapidement à la prochaine requête :
<?php
$config = ['debug' => true, 'level' => 3, 'tags' => ['a', 'b']];
// Write a loadable PHP file.
file_put_contents('cache.php', '<?php return ' . var_export($config, true) . ';');
// Later, somewhere else:
$loaded = require 'cache.php';
?>$loaded est identique au tableau $config original — aucune analyse JSON ni étape de désérialisation requise.
Conclusion
var_export() transforme une variable en code PHP prêt à l'emploi. Passez $return = true pour capturer ce code sous forme de chaîne, gardez à l'esprit que null s'affiche en NULL et que les chaînes sont entre guillemets simples, et préférez serialize() lorsque vous avez besoin de faire un aller-retour avec des objets. Pour le débogage avec connaissance des types, comparez-le avec var_dump() et print_r().