Que haría uso json_encode($myText). He encontrado que las soluciones sugeridas print_ry (string)varfuncionan bien para valores escalares y objetos simples. Para variables complejas, clases u objetos si un completo __toString()no está definido, prefiero lo mencionado anteriormente json_encode.
Hay más detalles para la conversión y conversión de cadenas en la sección Cadenas del manual de PHP, incluido el manejo especial para booleanos y nulos.
Object of class Foo could not be converted to string. ¿Hay soluciones generales que puedan convertir cualquier cosa (matrices + objetos + lo que sea) en una cadena?
Nota: esto dará un aviso PHP cuando se use en matrices.
dave1010
29
@ MarkAmery Dio una respuesta que implícitamente llama el __toString()"Método Mágico", pero no mencionó eso en absoluto. El usuario solicitó una respuesta que era como el toString()método Java , y en PHP, esa es la __toString()función.
Supuhstar
2
@Supuhstar Ah, claro, finalmente entiendo de dónde vienes. Lo siento si estaba siendo obtuso antes. Estoy de acuerdo en que este es un detalle relevante y sería valioso agregarlo, tal vez separando la respuesta en las secciones 'Convertir primitivas' y 'Convertir objetos' con encabezados.
Mark Amery
309
Esto se hace con la conversión de texto:
$strvar =(string) $var;// Casts to string
echo $var;// Will cast to string implicitly
var_dump($var);// Will show the true type of the variable
En una clase, puede definir lo que se genera mediante el método mágico __toString. Un ejemplo está abajo:
classBottles{publicfunction __toString(){return'Ninety nine green bottles';}}
$ex =newBottles;
var_dump($ex,(string) $ex);// Returns: instance of Bottles and "Ninety nine green bottles"
"cuando el parámetro de retorno es VERDADERO, [print_r] devolverá una cadena". Como print_r es una buena manera de imprimir objetos, matrices (y también números / cadenas), es una buena manera de transformar un objeto en una cadena legible para humanos.
Cedric
1
Para tu información, ¡la trueparte es esencial! Probé varios métodos de conversión de cadenas, incluidos print_rtodos, y me decepcionó, y luego descubrí el trueparámetro (lea la documentación para saber por qué funciona).
ripper234
57
Puede usar la conversión de texto:
$var =(string)$varname;
o StringValue:
$var = strval($varname);
o SetType:
$success = settype($varname,'string');// $varname itself becomes a string
Todos trabajan para lo mismo en términos de malabarismo de tipos.
strval ($ varname) hace el truco para mí, especialmente cuando el valor se devuelve como tipo "variante" y necesita convertirse en una cadena o int.
Milán
strval()es lo que buscaba porque quería usarlo array_walk. Por ejemplo$array = array('cat',$object); array_walk($array,'strval'); // $array = array('cat',$object->__toString)
Buttle Butkus
33
¿Cómo convierto el valor de una variable PHP a cadena?
Un valor se puede convertir en una cadena usando la función (cadena) o la función strval () . (Editar: como también dijo Thomas ).
También debe lanzarse automáticamente cuando lo use como una cadena.
Obtiene el valor de cadena de una variable. Consulte la documentación en cadena para obtener más información sobre la conversión a cadena.
Esta función no realiza formateo en el valor devuelto. Si está buscando una forma de formatear un valor numérico como una cadena, consulte sprintf () o number_format ().
Esto es realmente muy útil porque quería convertir todos los números en cadenas sin usar una devolución de llamada personalizada. $strings = array_map('strval', $my_numbers);
peterchaula
Esta es la única respuesta que funciona con array_mapy callables en general.
Danon
18
Para las primitivas, simplemente use (string)$varo imprima esta variable de inmediato. PHP es un lenguaje de tipo dinámico y la variable se convertirá en una cadena sobre la marcha.
Si desea convertir objetos en cadenas, deberá definir un __toString()método que devuelva cadenas. Este método tiene prohibido lanzar excepciones.
Eso funciona, pero no sé si es la forma estándar de hacerlo en PHP.
Antoine Aubry
Es una forma muy estándar de hacerlo en bash
Yauhen Yakimovich
Este método funcionará si $ myVar es un objeto de clase con __toString o tipo escalar. En otros casos genera un error.
zennin
11
Creo que vale la pena mencionar que puede capturar cualquier salida (como print_r, var_dump) en una variable utilizando el almacenamiento en búfer de salida:
Vale la pena mencionar que no necesita eso con print_r . Simplemente use la anulación para regresar como una cadena.
ars265
1
Una mejor manera sería usar $result = var_export($someVar, true)sin ob.
Danon
8
Otra opción es usar la función settype incorporada:
<?php
$foo ="5bar";// string
$bar =true;// boolean
settype($foo,"integer");// $foo is now 5 (integer)
settype($bar,"string");// $bar is now "1" (string)?>
Esto realmente realiza una conversión en la variable a diferencia de la conversión de texto y le permite tener una forma general de convertir a múltiples tipos.
Además de la respuesta dada por Thomas G. Mayfield:
Si sigue el enlace al manual de fundición de cadenas, hay un caso especial que es bastante importante de entender:
(cadena) es preferible especialmente si su variable $ a es un objeto, porque PHP seguirá el protocolo de conversión de acuerdo con su modelo de objeto llamando al método mágico __toString () (si tal se define en la clase de la cual se instancia $ a )
PHP hace algo similar a
function castToString($instance){if(is_object($instance)&& method_exists($instance,'__toString')){return call_user_func_array(array($instance,'__toString'));}}
La operación de conversión (cadena) es una técnica recomendada para la programación PHP5 + que hace que el código sea más orientado a objetos. En mi opinión, este es un buen ejemplo de similitud de diseño (diferencia) con otros lenguajes OOP como Java / C # / etc., es decir, en su propia forma especial de PHP (siempre que sea por el bien o por el valor).
Como otros han mencionado, los objetos necesitan un __toStringmétodo para convertirse en una cadena. Un objeto que no define ese método aún puede producir una representación de cadena usando la función spl_object_hash .
Esta función devuelve un identificador único para el objeto. Esta identificación se puede utilizar como una clave hash para almacenar objetos o para identificar un objeto, siempre que el objeto no se destruya. Una vez que el objeto es destruido, su hash puede ser reutilizado para otros objetos.
Tengo una clase de objeto base con un __toStringmétodo predeterminado para llamar md5(spl_object_hash($this))para que la salida sea claramente única, ya que la salida de spl_object_hash puede ser muy similar entre los objetos.
Esto es particularmente útil para el código de depuración donde una variable se inicializa como un Objeto y más tarde en el código se sospecha que ha cambiado a un Objeto diferente. Simplemente haciendo eco de las variables en el registro puede revelar el cambio desde el hash del objeto (o no).
Algunos, si no todos, los métodos en las respuestas anteriores fallan cuando la variable de cadena deseada tiene un cero inicial , por ejemplo, 077543 .
Un intento de convertir dicha variable no puede obtener la cadena deseada, porque la variable se convierte a base 8 (octal) .
¡Esto es PICNIC (problema en la silla, no en la computadora) ya que aquí nada falla ! print 077543;salidas 32611, por lo que este es el valor de cadena correcto de $no. Nadie espera que (string)+1devuelva la cadena +1(devuelve correctamente 1) ni que $no = 1+1; print (string)$no;salga 1+1. Notas: (1) Lo mismo para hex ( $no=0xff;) también. (2) Puede recuperar el valor octal con '0'.decoct($no);(3) $no="077543";mantiene el 0inicio, "077543" + 1` da 77544mientras 077543+1(correctamente) da 32612. (PD: no se ha rechazado, ya que este error es común)
Tino
4
Creo que esta pregunta es un poco engañosa ya que toString () en Java no es solo una forma de transmitir algo a una cadena. Eso es lo que hace la conversión a través de (string) o String.valueOf (), y también funciona en PHP.
Pero como dije, esto es casting y, por lo tanto, no es el equivalente de toString () de Java.
toString en Java no solo convierte un objeto en una cadena. En su lugar, le dará la representación de cadena . Y eso es lo que hace __toString () en PHP.
¿Qué quiero decir con "dar la representación de cadena"? Imagine una clase para una biblioteca con millones de libros.
Convertir esa clase en una Cadena convertiría (por defecto) los datos, aquí todos los libros, en una cadena, por lo que la Cadena sería muy larga y la mayoría de las veces tampoco sería muy útil.
To String en su lugar le dará la representación de String, es decir, solo el nombre de la biblioteca. Esto es más corto y, por lo tanto, le brinda menos, pero más información importante.
Ambos son enfoques válidos pero con objetivos muy diferentes, ninguno de los dos es una solución perfecta para cada caso y debe elegir sabiamente cuál se adapta mejor a sus necesidades.
Claro, hay aún más opciones:
$no =421337// A number in PHP
$str ="$no";// In PHP, stuff inside "" is calculated and variables are replaced
$str = print_r($no,true);// Same as String.format();
$str = settype($no,'string');// Sets $no to the String Type
$str = strval($no);// Get the string value of $no
$str = $no .'';// As you said concatenate an empty string works too
Todos estos métodos devolverán una Cadena, algunos de ellos usando __toString internamente y otros fallarán en Objetos. Consulte la documentación de PHP para obtener más detalles.
Las comillas dobles también deberían funcionar ... debería crear una cadena, luego debería APENDER / INSERTAR el valor de CADENA de $ myVar entre 2 cadenas vacías.
Si está convirtiendo algo que no sean tipos simples como enteros o booleanos, necesitaría escribir su propia función / método para el tipo que está tratando de convertir, de lo contrario, PHP simplemente imprimirá el tipo (como array, GoogleSniffer o bidet).
PHP se escribe dinámicamente, por lo que, como dijo Chris Fournier, "si lo usa como una cadena, se convierte en una cadena". Si está buscando más control sobre el formato de la cadena, printf es su respuesta.
$parent_category_name ="new clothes & shoes";// To make it to string option one
$parent_category = strval($parent_category_name);// Or make it a string by concatenating it with 'new clothes & shoes'// It is useful for database queries
$parent_category ="'". strval($parent_category_name)."'";
Votados, ya que realmente no tengo idea de lo que quieres decirnos. Usar strval()cuerdas es solo una completa pérdida de tiempo.
Tino
amigo, la cosa es suponer que recibiste un valor de cadena = cuando se repite será "la cadena". Pero, cuando desea mostrar eso en javascript, debe hacerlo 'stringx' '
Daniel Adenew
Esto es extremadamente peligroso (por no decir: simplemente incorrecto). ¡Eche un vistazo a stackoverflow.com/q/168214 o stackoverflow.com/q/23740548 para comprender cómo pasar de forma segura algo de PHP a JS! (Perdón por ser un poco fuera de tema: pasar una var PHP a JS no era parte de la pregunta).
Tino
0
Para los objetos, es posible que no pueda utilizar el operador de lanzamiento. En cambio, uso el json_encode()método.
Por ejemplo, lo siguiente generará contenido en el registro de errores:
Pruebe este enfoque poco extraño pero funcional para convertir la parte textual de stdClass en tipo de cadena:
$my_std_obj_result = $SomeResponse->return->data;// Specific to object/implementation
$my_string_result = implode ((array)$my_std_obj_result);// Do conversion
print_r(foo, true)
)!json_encode($myText)
. He encontrado que las soluciones sugeridasprint_r
y(string)var
funcionan bien para valores escalares y objetos simples. Para variables complejas, clases u objetos si un completo__toString()
no está definido, prefiero lo mencionado anteriormentejson_encode
.Respuestas:
Puedes usar los operadores de casting :
Hay más detalles para la conversión y conversión de cadenas en la sección Cadenas del manual de PHP, incluido el manejo especial para booleanos y nulos.
fuente
Object of class Foo could not be converted to string
. ¿Hay soluciones generales que puedan convertir cualquier cosa (matrices + objetos + lo que sea) en una cadena?__toString()
"Método Mágico", pero no mencionó eso en absoluto. El usuario solicitó una respuesta que era como eltoString()
método Java , y en PHP, esa es la__toString()
función.Esto se hace con la conversión de texto:
En una clase, puede definir lo que se genera mediante el método mágico
__toString
. Un ejemplo está abajo:Algunos ejemplos más de conversión de tipos:
fuente
Use print_r :
También puedes usarlo como:
Esto se establecerá
$myText
en una cadena, como:Use var_export para obtener un poco más de información (con tipos de variables, ...):
fuente
true
parte es esencial! Probé varios métodos de conversión de cadenas, incluidosprint_r
todos, y me decepcionó, y luego descubrí eltrue
parámetro (lea la documentación para saber por qué funciona).Puede usar la conversión de texto:
o StringValue:
o SetType:
Todos trabajan para lo mismo en términos de malabarismo de tipos.
fuente
strval()
es lo que buscaba porque quería usarloarray_walk
. Por ejemplo$array = array('cat',$object); array_walk($array,'strval'); // $array = array('cat',$object->__toString)
Un valor se puede convertir en una cadena usando la función (cadena) o la función strval () . (Editar: como también dijo Thomas ).
También debe lanzarse automáticamente cuando lo use como una cadena.
fuente
Estás buscando strval :
fuente
$strings = array_map('strval', $my_numbers);
array_map
y callables en general.Para las primitivas, simplemente use
(string)$var
o imprima esta variable de inmediato. PHP es un lenguaje de tipo dinámico y la variable se convertirá en una cadena sobre la marcha.Si desea convertir objetos en cadenas, deberá definir un
__toString()
método que devuelva cadenas. Este método tiene prohibido lanzar excepciones.fuente
Ponerlo entre comillas dobles debería funcionar:
fuente
Creo que vale la pena mencionar que puede capturar cualquier salida (como
print_r
,var_dump
) en una variable utilizando el almacenamiento en búfer de salida:Gracias a: ¿Cómo puedo capturar el resultado de var_dump en una cadena?
fuente
$result = var_export($someVar, true)
sin ob.Otra opción es usar la función settype incorporada:
Esto realmente realiza una conversión en la variable a diferencia de la conversión de texto y le permite tener una forma general de convertir a múltiples tipos.
fuente
Además de la respuesta dada por Thomas G. Mayfield:
Si sigue el enlace al manual de fundición de cadenas, hay un caso especial que es bastante importante de entender:
(cadena) es preferible especialmente si su variable $ a es un objeto, porque PHP seguirá el protocolo de conversión de acuerdo con su modelo de objeto llamando al método mágico __toString () (si tal se define en la clase de la cual se instancia $ a )
PHP hace algo similar a
La operación de conversión (cadena) es una técnica recomendada para la programación PHP5 + que hace que el código sea más orientado a objetos. En mi opinión, este es un buen ejemplo de similitud de diseño (diferencia) con otros lenguajes OOP como Java / C # / etc., es decir, en su propia forma especial de PHP (siempre que sea por el bien o por el valor).
fuente
Como otros han mencionado, los objetos necesitan un
__toString
método para convertirse en una cadena. Un objeto que no define ese método aún puede producir una representación de cadena usando la función spl_object_hash .Tengo una clase de objeto base con un
__toString
método predeterminado para llamarmd5(spl_object_hash($this))
para que la salida sea claramente única, ya que la salida de spl_object_hash puede ser muy similar entre los objetos.Esto es particularmente útil para el código de depuración donde una variable se inicializa como un Objeto y más tarde en el código se sospecha que ha cambiado a un Objeto diferente. Simplemente haciendo eco de las variables en el registro puede revelar el cambio desde el hash del objeto (o no).
fuente
Algunos, si no todos, los métodos en las respuestas anteriores fallan cuando la variable de cadena deseada tiene un cero inicial , por ejemplo, 077543 .
Un intento de convertir dicha variable no puede obtener la cadena deseada, porque la variable se convierte a base 8 (octal) .
Todo esto hará que
$str
tenga un valor de 32611 :fuente
print 077543;
salidas32611
, por lo que este es el valor de cadena correcto de$no
. Nadie espera que(string)+1
devuelva la cadena+1
(devuelve correctamente1
) ni que$no = 1+1; print (string)$no;
salga1+1
. Notas: (1) Lo mismo para hex ($no=0xff;
) también. (2) Puede recuperar el valor octal con'0'.decoct($no);
(3)$no="077543";
mantiene el0
inicio, "077543" + 1` da77544
mientras077543+1
(correctamente) da32612
. (PD: no se ha rechazado, ya que este error es común)Creo que esta pregunta es un poco engañosa ya que toString () en Java no es solo una forma de transmitir algo a una cadena. Eso es lo que hace la conversión a través de (string) o String.valueOf (), y también funciona en PHP.
Tenga en cuenta que esto puede ser problemático ya que Java es de tipo seguro ( consulte aquí para obtener más detalles ).
Pero como dije, esto es casting y, por lo tanto, no es el equivalente de toString () de Java.
toString en Java no solo convierte un objeto en una cadena. En su lugar, le dará la representación de cadena . Y eso es lo que hace __toString () en PHP.
Y desde el otro lado:
¿Qué quiero decir con "dar la representación de cadena"? Imagine una clase para una biblioteca con millones de libros.
Ambos son enfoques válidos pero con objetivos muy diferentes, ninguno de los dos es una solución perfecta para cada caso y debe elegir sabiamente cuál se adapta mejor a sus necesidades.
Claro, hay aún más opciones:
Todos estos métodos devolverán una Cadena, algunos de ellos usando __toString internamente y otros fallarán en Objetos. Consulte la documentación de PHP para obtener más detalles.
fuente
La documentación dice que también puedes hacer:
Es lo mismo que el elenco, pero creo que se ve más bonito.
Fuente:
fuente
Las comillas dobles también deberían funcionar ... debería crear una cadena, luego debería APENDER / INSERTAR el valor de CADENA de $ myVar entre 2 cadenas vacías.
fuente
Siempre puede crear un método llamado .ToString ($ in) que devuelve
fuente
Si está convirtiendo algo que no sean tipos simples como enteros o booleanos, necesitaría escribir su propia función / método para el tipo que está tratando de convertir, de lo contrario, PHP simplemente imprimirá el tipo (como array, GoogleSniffer o bidet).
fuente
PHP se escribe dinámicamente, por lo que, como dijo Chris Fournier, "si lo usa como una cadena, se convierte en una cadena". Si está buscando más control sobre el formato de la cadena, printf es su respuesta.
fuente
También puede usar la función PHP var_export .
fuente
fuente
strval()
cuerdas es solo una completa pérdida de tiempo.Para los objetos, es posible que no pueda utilizar el operador de lanzamiento. En cambio, uso el
json_encode()
método.Por ejemplo, lo siguiente generará contenido en el registro de errores:
fuente
Pruebe este enfoque poco extraño pero funcional para convertir la parte textual de stdClass en tipo de cadena:
fuente
Yo uso variableToString . Maneja todos los tipos de PHP y es flexible (puede extenderlo si lo desea).
fuente