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_export
Es posible que desee verificar
var_export
, aunque no proporciona la misma salidavar_dump
que proporciona un segundo$return
parámetro que hará que devuelva su salida en lugar de imprimirla:¿Por qué?
Prefiero este one-liner a usar
ob_start
yob_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_dump
yvar_export
es quevar_export
devuelve una "representación de cadena analizable de una variable" mientrasvar_dump
simplemente voltea información sobre una variable. Lo que esto significa en la práctica es quevar_export
le 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_export
en el ejemplo anterior):var_dump (
$debug_dump
en el ejemplo anterior):print_r (
$debug_printr
en el ejemplo anterior):Advertencia:
var_export
no maneja referencias circularesSi está intentando volcar una variable con referencias circulares, la llamada
var_export
dará como resultado una advertencia de PHP:Resultados en:
Ambos
var_dump
yprint_r
, por otro lado, generarán la cadena*RECURSION*
al encontrar referencias circulares.fuente
int(1)
mientras var_export solo se imprime1
.var_export
No 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_r
donde puedo, pero desafortunadamente a veces no proporciona suficiente información. Por ejemplo, ya que arroja a la cadena donde se pueda, tantofalse
ynull
muestran como una cadena vacía. En los casos en que me importa la diferencia entre estos, recurriría a regañadientes avar_dump
ovar_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_log
truncar cadenas que contienen bytes nulos .fuente
También
echo json_encode($dataobject);
podría ser útilfuente
json_encode
no contendrá todos los datosvar_dump
(como tipos de variables, por ejemplo).json_encode
genera la misma información queprint_R
, solo en un formato diferente.var_dump
. También afirmó queprint_R
se proporciona información insuficiente para sus necesidades. No existe una diferencia real en la información proporcionada porjson_encode
yprint_r
, solo el formato de datos es diferente. Dado esto, siprint_r
es 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
$argc
comprobació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_array
yfunc_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