Pregunta

¿Cómo convierto el valor de una variable PHP en una cadena?

Estaba buscando algo mejor que concatenar con una cadena vacía:

$myText = $myVar . '';

Como el ToString() método en Java o .NET.

¿Fue útil?

Solución

Puedes usar el operadores de fundición:

$myText = (string)$myVar;

Hay más detalles sobre la conversión y conversión de cadenas en el Sección de cuerdas del manual de PHP, incluido el manejo especial de valores booleanos y nulos.

Otros consejos

Esto se hace con el encasillamiento:

$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 puedes definir lo que se genera usando el método mágico __toString.A continuación se muestra un ejemplo:

class Bottles {
    public function __toString()
    {
        return 'Ninety nine green bottles';
    }
}

$ex = new Bottles;
var_dump($ex, (string) $ex);
// Returns: instance of Bottles and "Ninety nine green bottles"

Algunos ejemplos más de conversión de tipos:

$i = 1;

// int 1
var_dump((int) $i);

// bool true
var_dump((bool) $i);

// string "1"
var_dump((string) 1);

Usar imprimir_r:

$myText = print_r($myVar,true);

También puedes usar como

$myText = print_r($myVar,true)."foo bar";

esto establecerá $myText a una cadena, como:

array (
  0 => '11',
)foo bar

Usar var_exportación para obtener un poco más de información (con tipos de variables,...):

$myText = var_export($myVar,true);

Puedes usar el encasillamiento:

$var = (string)$varname;

o valor de cadena:

$var = strval($varname);

o establecer tipo:

$success = settype($varname, 'string');
// $varname itself becomes a string

Todos funcionan para lo mismo en términos de Type-Juggling.

¿Cómo convierto el valor de una variable PHP en cadena?

Un valor se puede convertir en una cadena usando el (cuerda) emitir o el cadena() función.(Editar:Como tomás también indicado).

También debería transmitirse automáticamente cuando lo use como una cadena.

Estás buscando lucha:

string strval ( mixed $var )

Obtenga el valor de cadena de una variable.Consulte la documentación sobre la cadena para obtener más información sobre la conversión a cadena.

Esta función no realiza ningún formato en el valor devuelto.Si está buscando una forma de formatear un valor numérico como una cadena, consulte Sprintf () o Number_Format ().

Para primitivos solo use (string)$var o imprima esta variable inmediatamente.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 __toString() método que devuelve una cadena.Este método tiene prohibido lanzar excepciones.

Ponerlo entre comillas dobles debería funcionar:

$myText = "$myVar";

Creo que vale la pena mencionar que puedes capturar cualquier resultado (como print_r, var_dump) en una variable mediante el uso de almacenamiento en búfer de salida:

<?php
ob_start();
var_dump($someVar);
$result = ob_get_clean();
?>

Gracias a:https://stackoverflow.com/a/139491/987864

Otra opción es utilizar el integrado tipo de configuración función:

<?php
$foo = "5bar"; // string
$bar = true;   // boolean

settype($foo, "integer"); // $foo is now 5   (integer)
settype($bar, "string");  // $bar is now "1" (string)
?>

En realidad, esto realiza una conversión de la variable a diferencia del encasillamiento y le permite tener una forma general de convertir a múltiples tipos.

Además de la respuesta dada por Thomas G.Mayfield:

Si sigues el enlace al manual de lanzamiento de cuerdas, hay un caso especial que es muy importante entender:

(cadena) es preferible, especialmente si su variable $a es un objeto, porque PHP seguirá el casting protocolo según su modelo de objetos llamando __Encadenar() método mágico (si tal está definido en la clase de la cual se crea una instancia de $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'));
    }
}

El (cadena) La operación de conversión es una técnica recomendada para la programación PHP5+ que hace que el código esté más orientado a objetos.En mi opinión, este es un buen ejemplo de similitud (diferencia) de diseño con otros lenguajes de programación orientada a objetos como Java/C#/etc., es decir.en su propia forma PHP especial (siempre que sea por el bien o por el valor).

Como otros han mencionado, los objetos necesitan un __toString método para convertirlo en una cadena.Un objeto que no define ese método aún puede producir una representación de cadena usando el spl_object_hash función.

Esta función devuelve un identificador único para el objeto.Esta identificación se puede utilizar como clave hash para almacenar objetos o para identificar un objeto, siempre que el objeto no se destruya.Una vez destruido el objeto, su hash puede reutilizarse para otros objetos.

Tengo una clase de objeto base con un __toString método que por defecto llama md5(spl_object_hash($this)) para que la salida sea claramente única, ya que la salida de spl_object_hash puede verse muy similar entre objetos.

Esto es particularmente útil para depurar código donde una variable se inicializa como un Objeto y más adelante en el código se sospecha que ha cambiado a un Objeto diferente.Simplemente hacer eco de las variables en el registro puede revelar el cambio del hash del objeto (o no).

Algunos, si no todos, los métodos anteriores fallan cuando la variable de cadena deseada tiene un cero a la izquierda. es decir, 077543un intento de convertir dicha variable no logra obtener la cadena deseada porque la variable se convierte a base 8 (octal).

Todo esto hará $str tener un valor de 32611

$no = 077543  
$str = (string)$no;   
$str = "$no";   
$str = print_r($no,true);  
$str = strval($no);   
$str = settype($no, "integer");  

La documentación dice que también puedes hacer:

$str = "$foo";

Es igual que el elenco, pero creo que se ve más bonito.

Fuente:

Creo que esta pregunta es un poco engañosa ya que ToString () en Java no es solo una forma de lanzar algo a una cuerda, eso es lo que fundición via (string) o String.valueOf() lo hace y funciona igual de bien en PHP.

//Java
String myText = (string) myVar;
//PHP
$myText = (string) $myVar;

Tenga en cuenta que esto puede ser problemático ya que Java guarda tipos. Vea aquí para 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 lanza un objeto a una Cadena, sino que le dará la representación de la Cadena.Y eso es lo que __Encadenar() en PHP lo hace

//Java
class SomeClass{
    public String toString(){ 
        return 'some string representation'; 
    } 
}
//php
class SomeClass{
    public function __toString()
    {
        return 'some string representation';
    }
}

Y desde el otro lado:

//Java
new SomeClass().toString();//'some string representation'
//PHP
strval(new SomeClass);//'some string representation'

¿Qué quiero decir con "dar la representación de cadena"?Imagine una clase para una biblioteca con millones de libros.

  • Convertir esa clase a una Cadena convertiría (de forma predeterminada) 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 muy útil.
  • To String insted le dará la representación de String, es decir.sólo el nombre de la biblioteca.Esto es más corto y por lo tanto le brinda menos información pero más importante.

Ambos son enfoques válidos pero con objetivos muy diferentes, ninguno es una solución perfecta para cada caso y debes elegir sabiamente cuál se adapta mejor a tus necesidades.

Seguro que 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 concat an empty string works too

Todos estos métodos devolverán una cadena, algunos de ellos usan __toString internamente, otros fallarán en los objetos. Eche un vistazo a Documentación PHP para más detalles.

Las comillas dobles también deberían funcionar...debería crear una cadena, luego debería AÑADIR/INSERTAR el valor de CADENA emitido de $myVar entre 2 cadenas vacías.

Siempre puedes crear un método llamado .ToString($in) que devuelva

$in . '';  

Si está convirtiendo algo que no sean tipos simples como números enteros o booleanos, deberá escribir su propia función/método para el tipo que está intentando convertir; de lo contrario, PHP simplemente imprimirá el tipo (como matriz, GoogleSniffer , o bidé).

PHP se escribe dinámicamente, por lo que, como dijo Chris Fournier, "si lo usas como una cadena, se convierte en una cadena".Si buscas más control sobre el formato de la cadena, entonces imprimirf es tu respuesta.

Puedes usar también, var_exportación función php.

$parent_category_name = "new clothes & shoes" ;
//TO make it to string option one
$parent_category = strval($parent_category_name);
//Or make it string my concatenating it with 'new clothes & shoes' 
//useful for database queries
$parent_category = "'".strval($parent_category_name)."'";

Para objetos, es posible que no pueda utilizar el operador de transmisión.En cambio, uso el json_encode() método.

Por ejemplo, lo siguiente mostrará el contenido en el registro de errores:

error_log(json_encode($args));

Pruebe este enfoque un poco extraño pero funcional para convertir la parte textual de stdClass al 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

Yo uso variableToString

https://github.com/lingtalfi/VariableToString

Maneja todo tipo de php y es flexible (puedes ampliarlo si lo deseas)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top