Me gustaría capturar la salida de var_dump una cadena.
La documentación de PHP dice;
Al igual que con cualquier cosa que envíe su resultado directamente al navegador, las funciones de control de salida se pueden usar para capturar la salida de esta función y guardarla en una cadena (por ejemplo).
¿Cuál sería un ejemplo de cómo podría funcionar?
print_r() no es una posibilidad válida, porque no me dará la información que necesito.

strip_tags(), esto simplemente devolverá el tipo y el valor.Tratar
var_exportEs posible que desee verificar
var_export, aunque no proporciona la misma salidavar_dumpque proporciona un segundo$returnparámetro que hará que devuelva su salida en lugar de imprimirla:¿Por qué?
Prefiero este one-liner a usar
ob_startyob_get_clean(). También encuentro que la salida es un poco más fácil de leer, ya que es solo código PHP.La diferencia entre
var_dumpyvar_exportes quevar_exportdevuelve una "representación de cadena analizable de una variable" mientrasvar_dumpsimplemente voltea información sobre una variable. Lo que esto significa en la práctica es quevar_exportle brinda un código PHP válido (pero puede que no le brinde tanta información sobre la variable, especialmente si está trabajando con recursos ).Manifestación:
La diferencia en salida:
var_export (
$debug_exporten el ejemplo anterior):var_dump (
$debug_dumpen el ejemplo anterior):print_r (
$debug_printren el ejemplo anterior):Advertencia:
var_exportno maneja referencias circularesSi está intentando volcar una variable con referencias circulares, la llamada
var_exportdará como resultado una advertencia de PHP:Resultados en:
Ambos
var_dumpyprint_r, por otro lado, generarán la cadena*RECURSION*al encontrar referencias circulares.fuente
int(1)mientras var_export solo se imprime1.var_exportNo es realmente mejor para depurar porque no se puede hacer una búsqueda del navegador para(int)o (cadena) y `etc. También mangles una gran cantidad de información en un espacio pequeño, sólo tratar:var_export(''); var_export('\'');. Y lo más importante, prepárate para PHP Error grave : nivel de anidamiento demasiado profundo: ¿dependencia recursiva? en C: \ path \ file.php en la línea 75También puedes hacer esto:
fuente
print_rdonde puedo, pero desafortunadamente a veces no proporciona suficiente información. Por ejemplo, ya que arroja a la cadena donde se pueda, tantofalseynullmuestran como una cadena vacía. En los casos en que me importa la diferencia entre estos, recurriría a regañadientes avar_dumpovar_export.También puede intentar usar la
serialize()función. A veces es muy útil para fines de depuración.fuente
error_logél, no debe usar esta solución, ya que la salida de serializar puede contener bytes nulos yerror_logtruncar cadenas que contienen bytes nulos .fuente
También
echo json_encode($dataobject);podría ser útilfuente
json_encodeno contendrá todos los datosvar_dump(como tipos de variables, por ejemplo).json_encodegenera la misma información queprint_R, solo en un formato diferente.var_dump. También afirmó queprint_Rse proporciona información insuficiente para sus necesidades. No existe una diferencia real en la información proporcionada porjson_encodeyprint_r, solo el formato de datos es diferente. Dado esto, siprint_res insuficiente, también lo esjson_encode. Por favor, no te quejes más del voto negativo. Obviamente no fue solo un clic al azar, así que lidia con eso.Del manual de PHP :
Entonces, aquí está la versión de retorno real de PHP
var_dump(), que en realidad acepta una lista de argumentos de longitud variable:fuente
$argccomprobación aquí es innecesaria y podría decirse que es incorrecta, como lo señaló @hanshenrik, y una vez que la quitas, todo lo que realmente estás agregando son las llamadascall_user_func_arrayyfunc_get_args.Si desea ver el contenido de una variable durante el tiempo de ejecución, considere usar un depurador real como XDebug. De esa manera, no necesita estropear su código fuente, y puede usar un depurador incluso mientras los usuarios normales visitan su aplicación. No se darán cuenta.
fuente
Aquí está la solución completa como una función:
fuente
Esto tal vez un poco fuera de tema.
Estaba buscando una manera de escribir este tipo de información en el registro de Docker de mi contenedor PHP-FPM y se me ocurrió el fragmento a continuación. Estoy seguro de que los usuarios de Docker PHP-FPM pueden usarlo.
fuente
file_put_contents('php://stdout',var_export($object, true),FILE_APPEND);Realmente me gusta
var_dump()el resultado detallado y no estaba satisfecho convar_export()elprint_r()resultado porque no daba tanta información (por ejemplo, falta el tipo de datos, falta la longitud).Para escribir código seguro y predecible, a veces es útil diferenciar entre una cadena vacía y una nula. O entre un 1 y un verdadero. O entre un nulo y un falso. Entonces quiero mi tipo de datos en la salida.
Aunque fue útil, no encontré una solución limpia y simple en las respuestas existentes para convertir la salida coloreada de
var_dump()una salida legible por humanos en una cadena sin las etiquetas html e incluyendo todos los detalles devar_dump().Tenga en cuenta que si tiene un color
var_dump(), significa que tiene instalado Xdebug que anula el valor predeterminado de phpvar_dump()para agregar colores html.Por esa razón, creé esta ligera variación dando exactamente lo que necesito:
Devuelve la siguiente cadena agradable:
Espero que ayude a alguien.
fuente
De http://htmlexplorer.com/2015/01/assign-output-var_dump-print_r-php-variable.html :
ob_get_clean () solo puede borrar los últimos datos ingresados en el búfer interno. Por lo tanto, el método ob_get_contents será útil si tiene varias entradas.
De la misma fuente que arriba:
fuente
Cadena larga : solo use en
echo($var);lugar dedump($var);.Objeto o matriz :
var_dump('<pre>'.json_encode($var).'</pre>);'fuente