Uma alternativa Var_dump mais bonita / informativa em PHP? [fechadas]


130

Todo programador decente de PHP tem print_rou var_dumpinvólucro que usa, ama e atribui teclas de atalho, por que não compartilhamos as nossas favoritas ?


39
Eu apenas uso echo '<pre>'; print_r ($ var); exit; eu nem fechá-lo. Eu acho que não sou digno
Funky do Cara

Editei o link para apontar para o github, onde continuo o desenvolvimento do Kint e, se você ainda tiver algum problema, informe-me por qualquer meio.
raveren

1
Ei, Kint é legal! Apenas salvou o meu dia.
István Ujj-Mészáros

2
Por que uma pergunta que é 100% é um aviso de publicidade de um programa em uma versão "eu faço minha própria var_dump ()"? A primeira pergunta seria por que uma publicidade de produto é permitida como pergunta.
M3nda

11
Porque eu fiz a ferramenta mais de um ano depois, depois de fazer a pergunta. Não sei o que está incomodando, criei uma ferramenta de código aberto madura de 10k + linhas e a estou aprimorando constantemente anos depois. Forneci minha própria resposta na pergunta - como é tradição no SO.
raveren 19/11

Respostas:


70

Um ano inteiro de tempo e trabalho depois de perguntar isso, finalmente abri minha versão do var_dump, Kint. Leia sobre isso na página do projeto ou diretamente no github .

Aqui está uma captura de tela:

kint

Desculpe pelo plugue :)


EDIT: Gostaria de lembrar aos comentaristas que este não é um fórum de suporte. Se você está com problemas / deseja um recurso, registre um problema . O suporte para solicitar comentários será sinalizado para exclusão.


Eu tive que mudar o tamanho da fonte, e embelezar o código CSS, mas bom trabalho, eu gosto ... vindo de um longo tempo Krumo usuário
Quamis

1
quais as mudanças que você fez, se você acreditar que é uma melhoria, você pode me enviar as alterações raveren@gmail.com
raveren

Eu estava acostumado com o Krumo e queria fontes menores, além de embelezar o código CSS. Nada que possa ser chamado de uma melhoria real, mais como um velho hábito :)
Quamis

bem, a idéia era que o css deveria ser compactado junto com o js para interferir o mínimo possível com a saída real. Claro, muito recuo da fonte gerado foi planejado também, mas eu atualmente não têm tempo para se dedicar a Kint ..
raveren

2
Apenas como exemplo, o Kint mostra variáveis ​​protegidas e privadas se você despejar um objeto, o krumo não (porque apenas o primeiro usa classes de reflexão que eu assumo). De um modo geral, achei Kint superior; embora eu também tenha que ajustar o css para torná-lo mais utilizável (essa fonte enorme não funciona muito bem ao despejar toneladas de propriedades aninhadas). Oh eo código por trás não é uma confusão, algo que não pode dizer de Krumo (desculpe Krumo autor!)
Mahn

45

Meu preferido é a var_dumpfunção, conforme fornecida pela extensão Xdebug : basta instalar a extensão (fácil, tanto no Windows quanto no Linux) , e var_dumpobtém uma saída melhor:

  • melhor formatação
    • HTML
    • cores
  • e você tem opções para ajustar quantas informações devem ser exibidas

E uma captura de tela rápida:

xdebug


E, é claro, o Xdebug traz muitas outras coisas úteis, como depuração remota (ou seja, depuração gráfica do seu aplicativo PHP, no Eclipse PDT por exemplo) , criação de perfil, ...


1
Eu preciso usar essa classe de formatação xdebug em um host compartilhado. Existe alguma maneira de incluí-lo no meu projeto pessoal?
Anyul Rivas

1
Se você não é administrador (raiz) do seu servidor, provavelmente não poderá instalar uma extensão PHP (nunca vi um serviço de hospedagem compartilhada que instalasse um para instalar extensões PHP) ; portanto, não, você não poderá usar o Xdebug (de qualquer forma, instalá-lo em um servidor de produção geralmente não é uma boa idéia: afinal, é uma extensão de depuração) ; você terá que recorrer a uma implementação baseada em PHP de uma função de saída variável (veja algumas outras respostas)
Pascal MARTIN

1
Sim, eu só precisava da classe para me enviar alguma saída quando ocorrer um erro.
Anyul Rivas

34

Eu escrevi o meu próprio: REF ( demo ):

saída r ()

Os planos são adicionar renderização somente texto e exibir informações sobre a expressão de entrada, como o Kint ...


4
Bom trabalho, ferramenta muito boa #
ssuperczynski 13/03/2013

2
REF é incrível, colorido, rápido. Eu uso isso o tempo todo.
Marty McGee

2
Ótima ferramenta, eu apenas mudei para ela. Obrigado!
Andris

Algumas pessoas usam compositor, bem ... não eu. Se você criar um dll, usarei este "debug". Obrigado e bom trabalho!
8777 Alex

27

Aqui está o meu, que eu uso em linha, muito útil:

$pretty = function($v='',$c="&nbsp;&nbsp;&nbsp;&nbsp;",$in=-1,$k=null)use(&$pretty){$r='';if(in_array(gettype($v),array('object','array'))){$r.=($in!=-1?str_repeat($c,$in):'').(is_null($k)?'':"$k: ").'<br>';foreach($v as $sk=>$vl){$r.=$pretty($vl,$c,$in+1,$sk).'<br>';}}else{$r.=($in!=-1?str_repeat($c,$in):'').(is_null($k)?'':"$k: ").(is_null($v)?'&lt;NULL&gt;':"<strong>$v</strong>");}return$r;};

echo $pretty($some_variable);

2
Amo essa função - fácil e clara e eu fiz menção muito fácil :)
derekdreery

Obrigado. Eu uso isso o tempo todo. Deveria ser embutido no PHP realmente. Você pode colocar sua própria formatação, usando o segundo parâmetro. por exemplo, echo $ pretty ($ some_variable, "-");
Guillermo Phillips

7
Isso combina lindamente todos os piores recursos de print_r, var_dump e var_export. Nenhum escape de html, aceita apenas um parâmetro, trava na recursão, não pode retornar a saída e, ainda por cima, é totalmente ilegível . Eu não quero ser um idiota, mas os comentários fazem parecer tão perfeito.
raveren

Obrigado pelo seu comentário @Raveren. Se você puder ser mais específico, melhorarei minha resposta.
Guillermo Phillips

2
A IMO, a melhor solução de linha única, é simples function pretty(){echo'<pre>';foreach(func_get_args()as $arg){ob_start();var_dump($arg);echo htmlentities(ob_get_clean())."\n#####\n#####\n\n";}die;}. Var_dump é uma função muito detalhada, ele lida com todos os casos de borda do PHP (dos quais existem MUITOS) e é 100% estável, mesmo que não seja tão legível. Mas, no final das contas, se você acha que sua implementação é melhor para você, é isso que você definitivamente deve usar.
raveren

16

Você está procurando o Krumo ( aviso, alertas do Chrome para malware ).

Simplificando, o Krumo é um substituto para print_r () e var_dump (). Por definição, o Krumo é uma ferramenta de depuração (inicialmente para PHP4 / PHP5, agora apenas para PHP5), que exibe informações estruturadas sobre qualquer variável PHP.


Isto é brilhante! Obrigado. +1
the_drow

2
quando tentei, estava quebrado. I Divulgados, mas nenhuma resposta e nenhuma nova versão
MAWG diz Reintegrar Monica

2
@Pekka O link está lançando um aviso de malware no Chrome.
Tim Post

Hoje krumo foi atualizado por esse cara github.com/mmucklo/krumo (mas Kint pode ser melhor, mais detalhes)
lolesque

9

Eu amo Firephp mais firebug

  • Ele grava as informações de log usando cabeçalhos, para não quebrar o AJAX.
  • Oferece uma representação gráfica muito boa das variáveis ​​/ objetos que você registra
  • Pode exibir o nome do arquivo e o número da linha onde ocorre cada instrução de log
  • Fácil de usar em seu projeto, com uma API processual ou orientada a objetos


8

Minha solução (parcial) para isso é simplesmente adicionar uma função como esta (usando o Google Chrome):

<?
function console_dump($value)
{ 
?>
<script>
    console.log(<? echo json_encode($value); ?>);
</script>
<?
}
?>

Pressione Ctrl + Shift + J (abre o console) e você poderá encontrar a estrutura JSON. Ainda mais útil para uma boa impressão das respostas JSON, é claro.


8

Um exemplo completo do que eu uso ...

<pre>

<?php


//*********** Set up some sample data

$obj = new stdClass;
$obj->a=123;
$obj->pl=44;
$obj->l=array(31,32);

$options = array(
  'Orchestra'=>array(1=>'Strings', 8=>'Brass', 9=>$obj, 3=>'Woodwind', 16=>'Percussion'),
  2=>'Car',
  4=>'Bus',
  'TV'=>array(21=>'Only Fools', 215=>'Brass Eye', 23=>'Vic Bob',44=>null, 89=>false));


//*********** Define the function

function dump($data, $indent=0) {
  $retval = '';
  $prefix=\str_repeat(' |  ', $indent);
  if (\is_numeric($data)) $retval.= "Number: $data";
  elseif (\is_string($data)) $retval.= "String: '$data'";
  elseif (\is_null($data)) $retval.= "NULL";
  elseif ($data===true) $retval.= "TRUE";
  elseif ($data===false) $retval.= "FALSE";
  elseif (is_array($data)) {
    $retval.= "Array (".count($data).')';
    $indent++;
    foreach($data AS $key => $value) {
      $retval.= "\n$prefix [$key] = ";
      $retval.= dump($value, $indent);
    }
  }
  elseif (is_object($data)) {
    $retval.= "Object (".get_class($data).")";
    $indent++;
    foreach($data AS $key => $value) {
      $retval.= "\n$prefix $key -> ";
      $retval.= dump($value, $indent);
    }
  }
  return $retval;
}


//*********** Dump the data

echo dump($options);

?>
</pre>

Saídas ...

Array (4)
 [Orchestra] = Array (5)
 |   [1] = String: 'Strings'
 |   [8] = String: 'Brass'
 |   [9] = Object (stdClass)
 |   |   a -> Number: 123
 |   |   pl -> Number: 44
 |   |   l -> Array (2)
 |   |   |   [0] = Number: 31
 |   |   |   [1] = Number: 32
 |   [3] = String: 'Woodwind'
 |   [16] = String: 'Percussion'
 [2] = String: 'Car'
 [4] = String: 'Bus'
 [TV] = Array (5)
 |   [21] = String: 'Only Fools'
 |   [215] = String: 'Brass Eye'
 |   [23] = String: 'Vic Bob'
 |   [44] = NULL
 |   [89] = FALSE

1
Mudei \ n para PHP_EOL e isso funciona muito bem quando usar php de CMD da janela
iewebguy

7

Aqui é minha:

class sbwDebug
{
    public static function varToHtml($var = '', $key = '')
    {
        $type = gettype($var);
        $result = '';

        if (in_array($type, ['object', 'array'])) {
            $result .= '
        <table class="debug-table">
            <tr>
            <td class="debug-key-cell"><b>' . $key . '</b><br/>Type: ' . $type . '<br/>Length: ' . count($var) . '</td>
            <td class="debug-value-cell">';

            foreach ($var as $akey => $val) {
                $result .= sbwDebug::varToHtml($val, $akey);
            }
            $result .= '</td></tr></table>';
        } else {
            $result .= '<div class="debug-item"><span class="debug-label">' . $key . ' (' . $type . '): </span><span class="debug-value">' . $var . '</span></div>';
        }

        return $result;
    }
}

Estilo:

table.debug-table {
  padding: 0;
  margin: 0;
  font-family: arial,tahoma,helvetica,sans-serif;
  font-size: 11px;
}

td.debug-key-cell {
  vertical-align: top;
  padding: 3px;
  border: 1px solid #AAAAAA;
}

td.debug-value-cell {
  vertical-align: top;
  padding: 3px;
  border: 1px solid #AAAAAA;
}

div.debug-item {
  border-bottom: 1px dotted #AAAAAA;
}

span.debug-label {
  font-weight: bold;
}

2
Nada mal, na verdade. Provavelmente teria sido votado mais se você tivesse mostrado um exemplo da saída.
Mawg diz restabelecer Monica 6/06/11

@acSlater Funciona para mim, você só precisa criar a sbwDebugclasse que ele esqueceu de postar e colocar a função nela.
precisa saber é o seguinte

6

Recentemente, desenvolvi uma extensão gratuita do Chrome (trabalho em andamento) para embelezar meus var dumps sem bibliotecas, sem pré tags e sem instalação em todos os aplicativos. Tudo feito com JavaScript e regEx. Tudo o que você precisa fazer é instalar a extensão e pronto. Também estou trabalhando em uma versão do Firefox. Aqui está a página do GitHub. Espero tê-lo disponível nas lojas virtuais chrome e firefox em breve!

https://github.com/alexnaspo/var_dumpling

Aqui está um exemplo de saída:

Saída de exemplo


6
bom rapaz! acabou de baixar sua extensão e ela funciona perfeitamente! Obrigado!
Coryj 28/11/12

5
Cara ... obrigado. Estou procurando por algo assim há algum tempo
broadbent

1
Irreal. Melhor opção ainda!
Christian

Tentei com o Firefox 15, que não era compatível. Alguma chance de ignorar isso?
cyberfly

1
Isso é lindo, gostaria de ter encontrado antes!


2

Essas bibliotecas sofisticadas são ótimas ... exceto as despesas gerais. Se você quer um var_dump simples e bonito que usa parâmetros infinitos, tente minha função. Ele adiciona um pouco de HTML simples. Também são adicionados atributos de dados. Se você usa HTML5, as versões inferiores os ignoram, mas facilita a abertura do elemento no console do navegador e a obtenção de mais informações se o que você vê na tela não for suficiente.

O layout é muito simples, sem custos adicionais. Fornece uma tonelada de informações para cada parâmetro, incluindo coisas como gettypee mesmo classnome para despejos de objetos (incluindo XML). É tentado e verdadeiro, eu tenho usado por anos.

function preDump() {    //  use string "noEcho" to just get a string return only
    $args = func_get_args();
    $doEcho = TRUE; $sb;
    if ($args) {
        $sb = '<div style="margin: 1em 0;"><fieldset style="display:inline-block;padding:0em 3em 1em 1em;"><legend><b>preDump: '.count($args).' Parameters Found.</b></legend>';
        foreach (func_get_args() as $arg) {
            if (gettype($arg) == 'string') if ($arg == 'noEcho') { $doEcho = FALSE; $sb = preg_replace('/(preDump: )[0-9]+/', 'preDump: '.(count($args)-1), $sb); continue; }
            $sb .= '<pre data-type="'.gettype($arg).'"';
            switch (gettype($arg)) {
                case "boolean":
                case "integer":
                    $sb .= ' data-dump="json_encode"><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')</b></p><p>';
                    $sb .= json_encode($arg);
                    break;
                case "string":
                    $sb .= ' data-dump="echo"><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')</b></p><p>';
                    $sb .= $arg;
                    break;
                default:
                    $sb .= ' data-dump="var_dump"';
                    if (is_object($arg)) $sb .= 'data-class="'.get_class($arg).'"';
                    $sb .= '><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')';
                    if (is_object($arg)) $sb .= ' ['.get_class($arg).']';
                    $sb .= '</b></p><p>';
                    ob_start();
                    var_dump($arg);
                    $sb .= ob_get_clean();
                    if (ob_get_length()) ob_end_clean();
            }
            $sb .= '</p></pre>';
        }
        $sb .= '</fieldset></div>';
    }
    else {
        $sb = '<div style="margin: 1em 0;"><fieldset style="display:inline-block;"><legend><b>preDump: [ERROR]</b></legend><h3>No Parameters Found</h3></fieldset></div>';
    }
    if ($doEcho) echo($sb);
    return $sb;
}

E se você usa o Codeigniter, adicione-o também ao seu CI EXTREMAMENTE SIMPLESMENTE. Primeiro, vá application/config/autoload.phpe verifique se helper 'string'está ligado.

$autoload['helper'] = array( 'string' ); 

Em seguida, basta ir criar um arquivo nomeado MY_string_helper.phpem application/helperssimples e inserir a função em um típicoif declaração para o check existência.

<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');
    if (!function_exists('preDump')) {
        function preDump() {
            ...
        }
    }
//  DON'T CLOSE PHP

| OU |, se você quiser tomar uma direção diferente.

O seguinte snippet é o mesmo que acima, exceto que mostrará suas variáveis ​​no console do navegador. Às vezes, isso pode facilitar a depuração de chamadas de objeto sql e outras chamadas de matriz e objeto em que você está perdendo o nome da chave ou o que for.

function consoleDump() {    //  use string "noEcho" to just get a string return only
    $args = func_get_args();
    $doEcho = TRUE; $sb;
    if ($args) {
        $sb = '<script type="text/javascript">console.log("<" + new Array('.(count($args) < 10 ? '49': '48').').join("-") + "[consoleDump: '.count($args).' items]" + new Array(50).join("-") + ">"); console.log([';

        foreach (func_get_args() as $i => $arg) {
            if (gettype($arg) == 'string') if ($arg == 'noEcho') { $doEcho = FALSE; $sb = preg_replace('/(consoleDump: )[0-9]+/', 'consoleDump: '.(count($args)-1), $sb); continue; }
            $sb .= '{ "type": "'.gettype($arg).'", ';
            switch (gettype($arg)) {
                case "boolean":
                case "integer":
                case "string":
                    $sb .= '"value": '.json_encode($arg);
                    break;
                default:
                    $sb .= '"value": '.json_encode($arg);
                    if (is_object($arg) || is_array($arg)) $sb .= ', "count": '.json_encode(count((array)$arg));
                    if (is_object($arg)) $sb .= ', "objectClass": "'.get_class($arg).'"';
            }
            $sb .= '}';
            if ($i < count($args)-1) $sb .= ', ';
        }
        $sb .= ']); console.log("<" + new Array(120).join("-") + ">"); </script>';
    }
    else {
        $sb = '<script type="text/javascript">console.log("<" + new Array(120).join("-") + ">");console.log("consoleDump: [ERROR] No Parameters Found");console.log("<" + new Array(120).join("-") + ">");</script>';
    }
    if ($doEcho) echo($sb);
    return $sb;
}

Funciona com tudo!

consoleDump($simpXMLvar, $_SESSION, TRUE, NULL, array( 'one' => 'bob', 'two' => 'bill' ), (object)array( 'one' => 'bob', 'two' => 'bill' ));


<------------------------------------------------[consoleDump: 6 items]------------------------------------------------->
[Object, Object, Object, Object, Object, Object] 
// This drops down to show your variables in JS objects, like:
    0: Object
        count: 4
        objectClass: "SimpleXMLElement"
        type: "object"
        value: Object
        __proto__: Object
        // ...etc...
<-----------------------------------------------------------------------------------------------------------------------> 

1
Por que alguém deveria se preocupar com a diminuição insignificante de desempenho em uma ferramenta de desenvolvimento? Esta função é literalmente echo '<pre>';var_dump($var);echo '</pre>';mais algum texto com valor zero.
raveren

@Raveren sim, exceto preDump('value', TRUE, array( 'bob => 'bill' ), (object)array( 'bob => 'bill' )' is quick and easy and gives a nice layout visually in the browser that shows each variable passed in it's own "area" with a type label, thus making debugging quick and easy. And since it's a snippet i keep in my IDE's toolbox, i can recall it with ease on any needed page or while working with any library. But sure, it's just an echo 'pre'; var_dump` com alguns simple htmlao seu redor, não texto com valor agregado. lol kik. Se você não gostar, não use. Apenas uma sugestão.
SpYk3HH

@Raveren E se você gostou disso ... você realmente amará minha atualização: P
SpYk3HH


1

Mais uma versão caseira:

http://github.com/perchten/neat_html

Eu gosto de pensar que é bastante flexível. Ele não visa um ambiente de saída específico, mas possui vários argumentos opcionais que você pode especificar por que alterar a saída / impressão ou comportamento, além de algumas configurações persistentes.




1

Se você está lidando com matrizes muito grandes em PHP, esta função pode ajudar:

function recursive_print ($varname, $varval) {
  if (! is_array($varval)):
    print $varname . ' = ' . var_export($varval, true) . ";<br>\n";
  else:
    print $varname . " = array();<br>\n";
    foreach ($varval as $key => $val):
      recursive_print ($varname . "[" . var_export($key, true) . "]", $val);
    endforeach;
  endif;
}

Basicamente, despeja toda a matriz onde cada elemento está em uma linha separada, o que é benéfico para encontrar os caminhos completos certos para certos elementos.

Exemplo de saída:

$a = array();
$a[0] = 1;
$a[1] = 2;
$a[2] = array();
$a[2][0] = 'a';
$a[2][1] = 'b';
$a[2][2] = 'c';

Veja: Como exportar array PHP onde cada par de valores-chave está em uma linha separada?


1

Estou surpreso que ninguém tenha mencionado o código mais fácil (embora não muito bonito). Se você deseja apenas obter uma saída legível (sem cores ou recuo), é simples <pre>um var_dumptrabalho simples , como em:

echo "<pre>";
var_dump($myvariable);
echo "</pre>";

Não é possível obter uma sobrecarga muito menor do que isso!



0

O meu preferido é depurar em https://github.com/hazardland/debug.php, que é uma biblioteca que contém apenas uma única função chamada debug (você pode copiar essa função no seu projeto ou na sua biblioteca) . A saída html típica de debug () se parece com isso:

insira a descrição da imagem aqui

Mas você pode enviar dados como um texto sem formatação com a mesma função também (com quatro guias com recuo de espaço) como este (e até registrá-los em arquivo, se necessário):

string : "Test string"
boolean : true
integer : 17
float : 9.99
array (array)
    bob : "alice"
    1 : 5
    2 : 1.4
object (test2)
    another (test3)
        string1 : "3d level"
        string2 : "123"
        complicated (test4)
            enough : "Level 4"

0

TVarDumper

Esta é uma ótima ferramenta que se destina a substituir a função PHP com bugs var_dumpeprint_r , uma vez que pode identificar corretamente os objetos referenciados recursivamente em uma estrutura complexa de objetos. Ele também possui um controle de profundidade recursivo para evitar a exibição recursiva indefinida de algumas variáveis ​​peculiares.

Veja: TVarDumper.php.


Por outras soluções alternativas que oferece mais vantagens em relação a var_dumpe print_re pode suportar referências circulares, por favor consulte: Usando print_r e var_dump com referência circular .


Para mais idéias, verifique também: Como você depura scripts PHP?


0

O meu é mais simples, para mim não tenho muito conhecimento / tempo para alterar a infraestrutura, instalar o xdebug, etc.

E em outros casos, bem, você não precisa de muito para um site simples do WP, por exemplo

Então eu uso:

highlight_string("\n<?" . var_export($var, true) . "?>\n");

isso realmente me ajuda muito.

mas como eu prefiro o DevConsole Environment, uso esta função incrível, mas simples:

https://codeinphp.github.io/post/outputting-php-to-browser-console/

Pequenos ajustes:

<?php 

/**
 * Logs messages/variables/data to browser console from within php
 *
 * @param $name: message to be shown for optional data/vars
 * @param $data: variable (scalar/mixed) arrays/objects, etc to be logged
 * @param $jsEval: whether to apply JS eval() to arrays/objects
 *
 * @return none
 * @author Sarfraz
 */
function logConsole($name, $data = NULL, $jsEval = FALSE)
{
     if (! $name) return false;

     $isevaled = false;
     $type = ($data || gettype($data)) ? 'Type: ' . gettype($data) : '';

     if ($jsEval && (is_array($data) || is_object($data)))
     {
          $data = 'eval(' . preg_replace('#[\s\r\n\t\0\x0B]+#', '', json_encode($data)) . ')';
          $isevaled = true;
     }
     else
     {
          $data = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
     }

     # sanitalize
     $data = $data ? $data : '';
     $search_array = array("#'#", '#""#', "#''#", "#\n#", "#\r\n#");
     $replace_array = array('"', '', '', '\\n', '\\n');
     $data = preg_replace($search_array,  $replace_array, $data);
     $data = ltrim(rtrim($data, '"'), '"');
     $data = $isevaled ? $data : ($data[0] === "'") ? $data : "'" . $data . "'";

$js = <<<JSCODE
\n<script>
// fallback - to deal with IE (or browsers that don't have console)
if (! window.console) console = {};
console.log = console.log || function(name, data){};
// end of fallback

console.log('===== PHP Dump =====');
console.log('$name');
console.log('$type');
console.log($data);
console.log('===== / PHP Dump =====');
console.log('\\n');
</script>
JSCODE;

     echo $js;
} # end logConsole

0

Outra opção é

composer require symfony/var-dumper --save-dev

Então, no seu arquivo, você apenas usa dump($var) e você acaba com uma saída como essainsira a descrição da imagem aqui


0

Eu tive que adicionar outra resposta aqui, porque eu realmente não queria seguir as etapas das outras soluções. É extremamente simples e não requer extensões, inclui etc e é o que eu prefiro. É muito fácil e muito rápido.

Primeiro, basta json_encode a variável em questão:

echo json_encode($theResult);

Copie o resultado obtido no JSON Editor em http://jsoneditoronline.org/, basta copiá-lo no painel esquerdo, clique em Copiar> e ele imprimirá o JSON em um formato de árvore muito bom.

Para cada um deles, mas espero que isso ajude outros a terem mais uma boa opção! :)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.