Question Comment puis-je capturer le résultat de var_dump dans une chaîne?


Je voudrais capturer la sortie de var_dump à une chaîne.

Les documents PHP disent:

Comme avec tout ce qui sort son résultat directement au navigateur, le fonctions de contrôle de sortie peut être utilisé pour capturer la sortie de cette fonction, et l'enregistrer dans une chaîne (par exemple).

Quelqu'un peut-il me donner un exemple de comment cela pourrait fonctionner?

print_r() Ce n'est pas une possibilité valable parce que ça ne va pas me donner l'information dont j'ai besoin.


507
2017-09-26 13:23


origine


Réponses:


Utiliser la mise en mémoire tampon de sortie:

<?php
ob_start();
var_dump($someVar);
$result = ob_get_clean();
?>

515
2017-09-26 13:25



Essayer var_export

Vous voudrez peut-être vérifier var_export - alors qu'il ne fournit pas le même résultat que var_dump il fournit une seconde $return paramètre qui le fera retourner sa sortie plutôt que de l'imprimer:

$debug = var_export($my_var, true);

Pourquoi?

Je préfère ce one-liner à l'aide ob_start et ob_get_clean(). Je trouve aussi que la sortie est un peu plus facile à lire, puisque c'est juste du code PHP.

La différence entre var_dump et var_export est-ce var_export retourne un "Représentation sous forme de chaîne parsable d'une variable" tandis que var_dump Décharge simplement des informations sur une variable. Ce que cela signifie dans la pratique est que var_export vous donne un code PHP valide (mais peut ne pas vous donner autant d'informations sur la variable, surtout si vous travaillez avec Ressources).

Démonstration

$demo = array(
    "bool" => false,
    "int" => 1,
    "float" => 3.14,
    "string" => "hello world",
    "array" => array(),
    "object" => new stdClass(),
    "resource" => tmpfile(),
    "null" => null,
);

// var_export -- nice, one-liner
$debug_export = var_export($demo, true);

// var_dump
ob_start();
var_dump($demo);
$debug_dump = ob_get_clean();

// print_r -- included for completeness, though not recommended
$debug_printr = print_r($demo, true);

La différence de sortie:

var_export ($debug_export dans l'exemple ci-dessus):

 array (
  'bool' => false,
  'int' => 1,
  'float' => 3.1400000000000001,
  'string' => 'hello world',
  'array' => 
  array (
  ),
  'object' => 
  stdClass::__set_state(array(
  )),
  'resource' => NULL, // Note that this resource pointer is now NULL
  'null' => NULL,
)

var_dump ($debug_dump dans l'exemple ci-dessus):

 array(8) {
  ["bool"]=>
  bool(false)
  ["int"]=>
  int(1)
  ["float"]=>
  float(3.14)
  ["string"]=>
  string(11) "hello world"
  ["array"]=>
  array(0) {
  }
  ["object"]=>
  object(stdClass)#1 (0) {
  }
  ["resource"]=>
  resource(4) of type (stream)
  ["null"]=>
  NULL
}

print_r ($debug_printr dans l'exemple ci-dessus):

Array
(
    [bool] => 
    [int] => 1
    [float] => 3.14
    [string] => hello world
    [array] => Array
        (
        )

    [object] => stdClass Object
        (
        )

    [resource] => Resource id #4
    [null] => 
)

Caveat: var_export ne gère pas les références circulaires

Si vous essayez de vider une variable avec des références circulaires, appelez var_export entraînera un avertissement PHP:

 $circular = array();
 $circular['self'] =& $circular;
 var_export($circular);

Résulte en:

 Warning: var_export does not handle circular references in example.php on line 3
 array (
   'self' => 
   array (
     'self' => NULL,
   ),
 )

Tous les deux var_dump et print_r, d'autre part, va sortir la chaîne *RECURSION* en rencontrant des références circulaires.


739
2017-09-26 13:38



Vous pourriez aussi faire ceci:

$dump = print_r($variable, true);

61
2017-09-26 13:27



Vous pouvez également essayer d'utiliser serialize() fonction, parfois très utile pour déboguer des puprposes.


15
2017-09-29 02:41



Aussi echo json_encode($dataobject); pourrait être utile


10
2017-08-06 15:59



function return_var_dump(){
    //works like var_dump, but returns a string instead of printing it.
    $args=func_get_args(); //for <5.3.0 support ...
    ob_start();
    call_user_func_array('var_dump',$args);
    return ob_get_clean();
}

10
2017-11-10 13:44



Je suis conscient que cette question est ancienne, mais personne n'a mentionné ce point.

Du Manuel PHP:

Cette fonction affiche des informations structurées sur une ou plusieurs expressions incluant son type et sa valeur.

Donc, voici le réal retourner la version de PHP var_dump(), qui accepte en réalité une liste d'arguments de longueur variable.

function var_dump_str()
{
    $argc = func_num_args();
    $argv = func_get_args();

    if ($argc > 0) {
        ob_start();
        call_user_func_array('var_dump', $argv);
        $result = ob_get_contents();
        ob_end_clean();
        return $result;
    }

    return '';
}

À votre santé.


7
2017-09-14 16:47



Si vous souhaitez consulter un contenu de variables pendant l'exécution, envisagez d'utiliser un véritable débogueur tel que XDebug. De cette façon, vous n'avez pas besoin de gâcher votre code source et vous pouvez utiliser un débogueur même lorsque les utilisateurs normaux visitent votre application. Ils ne remarqueront pas.


5
2017-12-27 16:47