Как я могу записать результат var_dump в строку?

Расширить объект Math с помощью метода точности

Object.defineProperty(Math, 'precision',{
   value: function (value,precision,type){
             var v = parseFloat(value),
                 p = Math.max(precision,0)||0,
                 t = type||'round';
              return (Math[t](v*Math.pow(10,p))/Math.pow(10,p)).toFixed(p);
          }
    });

console.log(
    Math.precision(3.1,3), // round 3 digits 
    Math.precision(0.12345,2,'ceil'), // ceil 2 digits
    Math.precision(1.1) // integer part
)

570
задан Peter Mortensen 13 July 2019 в 21:20
поделиться

6 ответов

Используйте выходную буферизацию:

<?php
ob_start();
var_dump($someVar);
$result = ob_get_clean();
?>
563
ответ дан Eran Galperin 13 July 2019 в 21:20
поделиться

Попробуйте var_export

, можно хотеть проверить var_export —, в то время как он не обеспечивает тот же вывод как var_dump, он действительно обеспечивает секунду $return параметр, который заставит его возвращать свой вывод, а не печатать его:

$debug = var_export($my_var, true);

, Почему?

я предпочитаю эту остроту использованию ob_start и ob_get_clean(). Я также нахожу, что вывод немного легче считать, так как это - просто код PHP.

различие между [1 113] и var_export то, что var_export возвраты "parsable строковое представление переменной" в то время как var_dump просто информация о дампах о переменной. Что это означает, на практике то, что var_export дает Вам допустимый код PHP (но может не дать Вам вполне как большую информацию о переменной, особенно если Вы работаете с [1 128] ресурсы ).

Демонстрация:

$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 приведет к предупреждению 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* при обнаружении с циклическими ссылками.

828
ответ дан inxilpro 13 July 2019 в 21:20
поделиться

Вы могли также сделать это:

$dump = print_r($variable, true);
69
ответ дан Ian P 13 July 2019 в 21:20
поделиться

Можно также попытаться использовать serialize() функция. Иногда это очень полезно для отладки целей.

15
ответ дан Peter Mortensen 13 July 2019 в 21:20
поделиться

Длинная строка : Просто используйте echo($var); вместо dump($var);.

Объект или Массив : var_dump('<pre>'.json_encode($var).'</pre>);'

-1
ответ дан 22 November 2019 в 22:07
поделиться

Если вы хотите посмотреть на содержимое переменной во время выполнения, рассмотрите возможность использования реального отладчика, такого как XDebug. Таким образом, вам не нужно будет портить исходный код, и вы можете использовать отладчик даже в то время, когда обычные пользователи посещают ваше приложение. Они не заметят.

.
5
ответ дан 22 November 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: