PHP equivalente ao toString() do .NET/Java
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.
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();
?>
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");
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)