Pergunta

Como faço para converter o valor de uma variável PHP em string?

Eu estava procurando algo melhor do que concatenar com uma string vazia:

$myText = $myVar . '';

Como o ToString() método em Java ou .NET.

Foi útil?

Solução

Você pode usar o operadores de fundição:

$myText = (string)$myVar;

Há mais detalhes sobre conversão e conversão de strings no Seção de cordas do manual do PHP, incluindo tratamento especial para booleanos e nulos.

Outras dicas

Isso é feito com conversão de tipo:

$strvar = (string) $var; // Casts to string
echo $var; // Will cast to string implicitly
var_dump($var); // Will show the true type of the variable

Em uma classe você pode definir o que será gerado usando o método mágico __toString.Um exemplo está abaixo:

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"

Mais alguns exemplos de conversão de tipo:

$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);

Você também pode usar como

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

isso irá definir $myText para uma string, como:

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

Usar var_exportação para obter um pouco mais de informação (com tipos de variáveis,...):

$myText = var_export($myVar,true);

Você pode usar a conversão de tipos:

$var = (string)$varname;

ou StringValue:

$var = strval($varname);

ou SetType:

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

Todos eles trabalham para a mesma coisa em termos de malabarismo de tipos.

Como faço para converter o valor de um PHP variável para string?

Um valor pode ser convertido em uma string usando o (string) lançado ou o strval() função.(Editar:Como Tomás também afirmou).

Ele também deve ser convertido automaticamente quando você o usa como uma string.

Você está procurando strval:

string strval ( mixed $var )

Obtenha o valor da string de uma variável.Consulte a documentação sobre string para Mais informações sobre como converter para corda.

Esta função não executa nenhuma formatação no valor retornado.Se você é procurando uma maneira de formatar um numérico valor como uma cadeia de caracteres, consulte sprintf() ou number_format().

Para primitivos basta usar (string)$var ou imprima esta variável imediatamente.PHP é uma linguagem de digitação dinâmica e a variável será convertida em string instantaneamente.

Se você quiser converter objetos em strings você precisará definir __toString() método que retorna string.Este método é proibido de lançar exceções.

Colocá-lo entre aspas duplas deve funcionar:

$myText = "$myVar";

Acho que vale a pena mencionar que você pode capturar qualquer saída (como print_r, var_dump) em uma variável usando buffer de saída:

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

Graças a:https://stackoverflow.com/a/139491/987864

Outra opção é usar o embutido tipo de conjunto função:

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

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

Na verdade, isso executa uma conversão na variável, diferentemente da conversão de tipo, e permite que você tenha uma maneira geral de converter para vários tipos.

Além da resposta dada por Thomas G.Mayfield:

Se você seguir o link para o manual de fundição de cordas, há um caso especial que é muito importante entender:

(string) cast é preferível, especialmente se sua variável $a é um objeto, porque o PHP seguirá a conversão protocolo de acordo com seu modelo de objeto chamando __para sequenciar() método mágico (se tal for definido na classe da qual $a é instanciado).

PHP faz algo semelhante a

function castToString($instance) 
{ 
    if (is_object($instance) && method_exists($instance, '__toString')) {
        return call_user_func_array(array($instance, '__toString'));
    }
}

O (corda) A operação de conversão é uma técnica recomendada para programação PHP5+, tornando o código mais orientado a objetos.IMO, este é um bom exemplo de semelhança (diferença) de design com outras linguagens OOP, como Java/C#/etc., ou seja,em seu próprio jeito PHP especial (sempre que for para o bem ou para o valor).

Como outros já mencionaram, os objetos precisam de um __toString método a ser convertido em uma string.Um objeto que não define esse método ainda pode produzir uma representação de string usando o método spl_object_hash função.

Esta função retorna um identificador exclusivo para o objeto.Este id pode ser usado como uma chave hash para armazenar objetos ou para identificar um objeto, desde que o objeto não seja destruído.Depois que o objeto for destruído, seu hash poderá ser reutilizado para outros objetos.

Eu tenho uma classe Object base com um __toString método cujo padrão é chamar md5(spl_object_hash($this)) para tornar a saída claramente única, já que a saída de spl_object_hash pode ser muito semelhante entre objetos.

Isso é particularmente útil para depurar código onde uma variável é inicializada como um Objeto e, posteriormente, no código, suspeita-se que ela tenha sido alterada para um Objeto diferente.Simplesmente ecoar os vars no log pode revelar a alteração do hash do objeto (ou não).

Alguns, se não todos, os métodos acima falham quando a variável de string pretendida tem um zero à esquerda ou seja, 077543uma tentativa de converter tal variável falha em obter a string pretendida porque a variável é convertida para base 8 (octal).

Tudo isso fará $str tem um valor de 32611

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

A documentação diz que você também pode fazer:

$str = "$foo";

É igual ao elenco, mas acho que fica mais bonito.

Fonte:

Acho que esta pergunta é um pouco enganosa, uma vez que, toString() em Java não é apenas uma maneira de converter algo em um String, é isso que fundição via (string) ou String.valueOf() funciona e funciona tão bem em PHP.

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

Observe que isso pode ser problemático, pois Java é digitado. Veja aqui para mais detalhes

Mas como eu disse, isso é Casting e, portanto, não é equivalente ao toString() do Java.toString em Java não apenas converte um objeto em uma String, ele lhe dará a representação de String.E é isso que __para sequenciar() em PHP faz

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

E do outro lado:

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

O que quero dizer com "fornecer a representação String"?Imagine uma aula para uma biblioteca com milhões de livros.

  • Converter essa classe em uma String (por padrão) converteria os dados, aqui todos os livros, em uma string, de modo que a String seria muito longa e na maioria das vezes também não muito útil.
  • To String insted fornecerá a representação de String, ou seja,apenas o nome da biblioteca.É mais curto e, portanto, fornece menos informações, mas mais importantes.

Ambas são abordagens válidas, mas com objetivos muito diferentes, nenhuma é a solução perfeita para cada caso e você deve escolher sabiamente qual se adapta melhor às suas necessidades.

Claro que existem ainda mais opções:

$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 esses métodos retornarão uma String, alguns deles usando __toString internamente, outros falharão em Objcts, dê uma olhada no Documentação PHP para mais detalhes.

Aspas duplas também devem funcionar ...ele deve criar uma string e, em seguida, deve APPEND/INSERT o valor convertido de STRING de $myVar entre 2 strings vazias.

Você sempre pode criar um método chamado .ToString($in) que retorna

$in . '';  

Se você estiver convertendo algo diferente de tipos simples, como números inteiros ou booleanos, você precisará escrever sua própria função/método para o tipo que está tentando converter, caso contrário, o PHP apenas imprimirá o tipo (como array, GoogleSniffer , ou Bidé).

O PHP é digitado dinamicamente, então, como disse Chris Fournier, "Se você usá-lo como uma string, ele se tornará uma string".Se você está procurando mais controle sobre o formato da string, então imprimir é a sua resposta.

Você pode usar também, var_exportação função 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, talvez você não consiga usar o operador de conversão.Em vez disso, eu uso o json_encode() método.

Por exemplo, o seguinte irá gerar conteúdo para o log de erros:

error_log(json_encode($args));

Experimente esta abordagem um pouco estranha, mas funcional, para converter a parte textual de stdClass para o tipo string:

$my_std_obj_result = $SomeResponse->return->data; //specific to object/implementation

$my_string_result = implode ((array)$my_std_obj_result); //do conversion

Eu uso variávelToString

https://github.com/lingtalfi/VariableToString

Ele lida com todos os tipos de php e é flexível (você pode estendê-lo se quiser)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top