Gostaria de capturar a saída de var_dump
uma string.
A documentação do PHP diz;
Como em qualquer coisa que produz seu resultado diretamente no navegador, as funções de controle de saída podem ser usadas para capturar a saída dessa função e salvá-la em uma string (por exemplo).
Qual seria um exemplo de como isso poderia funcionar?
print_r()
não é uma possibilidade válida, porque não vai me dar as informações que eu preciso.
strip_tags()
, isso simplesmente retornará o tipo e o valor.Tentar
var_export
Você pode querer dar uma olhada
var_export
- embora ele não forneça a mesma saída,var_dump
mas forneça um segundo$return
parâmetro que fará com que ele retorne sua saída em vez de imprimi-la:Por quê?
Eu prefiro esse one-liner a usar
ob_start
eob_get_clean()
. Também acho que a saída é um pouco mais fácil de ler, já que é apenas código PHP.A diferença entre
var_dump
evar_export
é quevar_export
retorna uma "representação de sequência analisável de uma variável" enquantovar_dump
simplesmente despeja informações sobre uma variável. O que isso significa na prática é quevar_export
fornece código PHP válido (mas pode não fornecer tantas informações sobre a variável, especialmente se você estiver trabalhando com recursos ).Demo:
A diferença na saída:
var_export (
$debug_export
no exemplo acima):var_dump (
$debug_dump
no exemplo acima):print_r (
$debug_printr
no exemplo acima):Advertência:
var_export
não lida com referências circularesSe você estiver tentando despejar uma variável com referências circulares, a chamada
var_export
resultará em um aviso do PHP:Resulta em:
Ambos
var_dump
eprint_r
, por outro lado, produzirão a string*RECURSION*
ao encontrar referências circulares.fonte
int(1)
enquanto var_export apenas será impresso1
.var_export
não é realmente melhor para depurar porque você não poderia fazer uma pesquisa navegador para(int)
ou (string) `e etc. Ele também mangles um monte de informações em um espaço pequeno, apenas tente:var_export(''); var_export('\'');
. E o mais importante, prepare-se para o erro fatal do PHP: Nível de aninhamento muito profundo - dependência recursiva? em C: \ path \ file.php na linha 75Você também pode fazer isso:
fonte
print_r
onde posso, mas, infelizmente, às vezes, não fornece informações suficientes. Por exemplo, como é transmitido para a cadeia de caracteres onde pode, ambosfalse
e sãonull
exibidos como uma cadeia de caracteres vazia. Nos casos em que me preocupo com a diferença entre eles, recorreria de má vontade avar_dump
ouvar_export
.Você também pode tentar usar a
serialize()
função Às vezes, é muito útil para fins de depuração.fonte
error_log
, você não deve usar esta solução, pois a saída da serialização pode conter bytes nulos eerror_log
truncar seqüências contendo bytes nulos .fonte
Também
echo json_encode($dataobject);
pode ser útilfonte
json_encode
não conterá todos os dadosvar_dump
(como tipos de variáveis, por exemplo).json_encode
gera as mesmas informações queprint_R
, inly em formato diferente.var_dump
. Ele também afirmou queprint_R
fornece informações insuficientes para suas necessidades. Não há diferença real nas informações fornecidas porjson_encode
eprint_r
- apenas o formato dos dados é diferente. Diante disso, seprint_r
for insuficiente, o mesmo serájson_encode
. Por favor, não reclame mais do voto negativo. Obviamente, não foi apenas um clique aleatório, então lide com isso.No manual do PHP :
Então, aqui está a versão real de retorno do PHP
var_dump()
, que realmente aceita uma lista de argumentos de tamanho variável:fonte
$argc
verificação aqui é desnecessária e indiscutivelmente incorreta, como apontado por @hanshenrik, e depois que você tira isso, tudo o que realmente está adicionando são as chamadascall_user_func_array
efunc_get_args
.Se você quiser dar uma olhada no conteúdo de uma variável durante o tempo de execução, considere usar um depurador real como o XDebug. Dessa forma, você não precisa atrapalhar seu código-fonte e pode usar um depurador mesmo enquanto usuários normais visitam seu aplicativo. Eles não vão perceber.
fonte
Aqui está a solução completa como uma função:
fonte
Este tópico talvez seja um pouco estranho.
Eu estava procurando uma maneira de escrever esse tipo de informação no log do Docker do meu contêiner PHP-FPM e criei o snippet abaixo. Tenho certeza de que isso pode ser usado pelos usuários do Docker PHP-FPM.
fonte
file_put_contents('php://stdout',var_export($object, true),FILE_APPEND);
Eu realmente gosto
var_dump()
da saída detalhada e não estava satisfeito comvar_export()
aprint_r()
saída, porque não deu tanta informação (por exemplo, tipo de dados ausente, comprimento ausente).Para escrever código seguro e previsível, às vezes é útil diferenciar entre uma sequência vazia e uma nula. Ou entre um 1 e um verdadeiro. Ou entre um nulo e um falso. Então, eu quero o meu tipo de dados na saída.
Embora útil, não encontrei uma solução limpa e simples nas respostas existentes para converter a saída colorida de
var_dump()
uma saída legível por humanos em uma string sem as tags html e incluindo todos os detalhes devar_dump()
.Note que se você tem um colorido
var_dump()
, significa que você tem o Xdebug instalado, que substitui o padrão do phpvar_dump()
para adicionar cores html.Por esse motivo, criei essa pequena variação dando exatamente o que preciso:
Retorna a string agradável abaixo:
Espero que ajude alguém.
fonte
Em http://htmlexplorer.com/2015/01/assign-output-var_dump-print_r-php-variable.html :
ob_get_clean () pode limpar apenas os últimos dados inseridos no buffer interno. Portanto, o método ob_get_contents será útil se você tiver várias entradas.
Da mesma fonte acima:
fonte
Long string : basta usar em
echo($var);
vez dedump($var);
.Objeto ou matriz :
var_dump('<pre>'.json_encode($var).'</pre>);'
fonte