php - मैं स्ट्रिंग में var_dump के परिणाम कैप्चर कैसे कर सकता हूं?




string var-dump (8)

var_export आज़माएं

आप var_export को देखना चाह सकते हैं - जबकि यह वही आउटपुट प्रदान नहीं करता है जैसे var_dump यह दूसरा $return पैरामीटर प्रदान करता है जो इसे प्रिंट करने के बजाय अपने आउटपुट को वापस करने का कारण बनता है:

$debug = var_export($my_var, true);

क्यूं कर?

मैं ob_start और ob_get_clean() का उपयोग करने के लिए यह एक-लाइनर पसंद करता हूं। मुझे यह भी पता चलता है कि आउटपुट पढ़ने के लिए थोड़ा आसान है, क्योंकि यह सिर्फ PHP कोड है।

var_export और var_export बीच का अंतर यह है कि var_export एक चर के "पारदर्शी स्ट्रिंग प्रस्तुति" देता है जबकि var_dump बस एक चर के बारे में जानकारी डंप करता है। अभ्यास में इसका क्या अर्थ है कि var_export आपको वैध PHP कोड देता है (लेकिन हो सकता है कि आप चर के बारे में ज्यादा जानकारी न दें, खासकर यदि आप resources साथ काम कर रहे हैं)।

डेमो:

$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);

आउटपुट में अंतर:

var_export (उपरोक्त उदाहरण में $debug_export ):

 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 ):

 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 ):

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

    [object] => stdClass Object
        (
        )

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

चेतावनी: var_export परिपत्र संदर्भों को संभाल नहीं करता है

यदि आप परिपत्र संदर्भों के साथ एक चर को डंप करने का प्रयास कर रहे हैं, तो var_export को कॉल var_export से PHP चेतावनी होगी:

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

का परिणाम:

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

दूसरी ओर, var_dump और print_r दोनों सर्कुलर संदर्भों का सामना करते समय स्ट्रिंग *RECURSION* आउटपुट करेंगे।

मैं var_dump के आउटपुट को स्ट्रिंग पर कैप्चर करना चाहता हूं।

PHP दस्तावेज़ कहते हैं;

किसी भी चीज के साथ जो सीधे अपने ब्राउज़र को आउटपुट आउटपुट करता है, आउटपुट-कंट्रोल फ़ंक्शंस का उपयोग इस फ़ंक्शन के आउटपुट को कैप्चर करने के लिए किया जा सकता है, और इसे स्ट्रिंग में सहेज सकता है (उदाहरण के लिए)।

क्या कोई मुझे उदाहरण दे सकता है कि यह कैसे काम कर सकता है?

print_r() वैध संभावना नहीं है क्योंकि यह मुझे वह जानकारी नहीं दे रहा है जिसकी मुझे आवश्यकता है।


आउटपुट बफरिंग का प्रयोग करें:

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

आप यह भी कर सकते हैं:

$dump = print_r($variable, true);

मुझे पता है कि यह सवाल पुराना है, लेकिन किसी ने इस बिंदु का उल्लेख नहीं किया है।

PHP मैनुअल से :

यह फ़ंक्शन एक या अधिक अभिव्यक्तियों के बारे में संरचित जानकारी प्रदर्शित करता है जिसमें इसके प्रकार और मान शामिल हैं।

तो, यहां PHP के var_dump() का असली रिटर्न संस्करण है, जो वास्तव में एक चर-लंबाई तर्क सूची स्वीकार करता है।

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 '';
}

चीयर्स।


यह शायद थोड़ा सा विषय है।

मैं इस तरह की जानकारी को अपने PHP-FPM कंटेनर के डॉकर लॉग में लिखने का तरीका ढूंढ रहा था और नीचे स्निपेट के साथ आया था। मुझे यकीन है कि इसका उपयोग डॉकर PHP-FPM उपयोगकर्ताओं द्वारा किया जा सकता है।

fwrite(fopen('php://stdout', 'w'), var_export($object, true));

समारोह के रूप में पूरा समाधान यहां है।

function varDumpToString ($var)
{
    ob_start();
    var_dump($var);
    return ob_get_clean();
}

echo json_encode($dataobject); सहायक हो सकता है


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();
}




var-dump