Eu usaria json_encode($myText). Descobri que as soluções sugeridas print_re (string)vartrabalho bem para valores escalares e objetos simples. Para variáveis complexas, classes ou objetos, se um completo __toString()não estiver definido, prefiro o mencionado acima json_encode.
Object of class Foo could not be converted to string. Existe uma solução geral que pode converter qualquer coisa (matrizes + objetos + o que for) em uma string?
Nota: isso dará um aviso ao PHP quando usado em matrizes.
dave1010
29
@MarkAmery Ele deu uma resposta que chama implicitamente o __toString()"Método Mágico", mas não mencionou isso. O usuário pediu uma resposta semelhante ao toString()método Java e, em PHP, essa é a __toString()função.
Supuhstar
2
@ Supuhstar Ah, certo, finalmente entendo de onde você vem. Desculpe se eu estava sendo obtuso antes. Concordo que esse é um detalhe relevante e seria valioso adicioná-lo, talvez separando a resposta nas seções 'Convertendo Primitivos' e 'Convertendo Objetos' com cabeçalhos.
Mark Amery
309
Isso é feito com a tipografia:
$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 é produzido usando o método mágico __toString. Um exemplo está abaixo:
classBottles{publicfunction __toString(){return'Ninety nine green bottles';}}
$ex =newBottles;
var_dump($ex,(string) $ex);// Returns: instance of Bottles and "Ninety nine green bottles"
"quando o parâmetro de retorno é TRUE, [print_r] retornará uma string." Como print_r é uma boa maneira de imprimir objetos, matrizes (e também números / strings), é uma boa maneira de transformar um objeto em uma string legível por humanos.
Cedric
1
FYI, recém-chegados, a trueparte é essencial! Eu tentei vários métodos de conversão de strings, incluindo print_re fiquei desapontado com todos eles, e então descobri o trueparâmetro (leia a documentação para saber por que ele funciona).
precisa saber é o seguinte
57
Você pode usar a conversão de texto:
$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.
strval ($ varname) faz o truque para mim, especialmente quando o valor é retornado como o tipo "variant" e precisa ser convertido em string ou int.
Milão
strval()era para isso que eu estava procurando, porque queria usá-lo array_walk. Por exemplo$array = array('cat',$object); array_walk($array,'strval'); // $array = array('cat',$object->__toString)
Buttle Butkus
33
Como faço para converter o valor de uma variável PHP em string?
Um valor pode ser convertido em uma string usando a conversão (string) ou a função strval () . (Editar: Como Thomas também afirmou).
Também deve ser convertido automaticamente para você quando você o usa como uma string.
Obtenha o valor da sequência de uma variável. Consulte a documentação sobre string para obter mais informações sobre a conversão em string.
Esta função não executa formatação no valor retornado. Se você estiver procurando uma maneira de formatar um valor numérico como uma string, consulte sprintf () ou number_format ().
Isso é realmente muito útil, porque eu queria converter todos os números em seqüências de caracteres sem usar um retorno de chamada personalizado. $strings = array_map('strval', $my_numbers);
precisa saber é o seguinte
Esta é a única resposta que funciona com array_mape chamando chamadas em geral.
Danon
18
Para primitivos, use (string)$varou imprima essa variável imediatamente. O PHP é uma linguagem de tipo dinâmico e a variável será convertida para string em tempo real.
Se você deseja converter objetos em cadeias, precisará definir o __toString()método que retorna a cadeia. Este método é proibido de lançar exceções.
<?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 efetua uma conversão na variável, diferentemente da transmissão de texto, e permite que você tenha uma maneira geral de converter em vários tipos.
Se você seguir o link do manual de fundição de cordas, há um caso especial que é muito importante para entender:
(string) cast é preferível, especialmente se sua variável $ a for um objeto, porque o PHP seguirá o protocolo de conversão de acordo com seu modelo de objeto chamando o método mágico __toString () (se 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'));}}
A operação de conversão de caracteres (string) é uma técnica recomendada para a programação PHP5 +, tornando o código mais orientado a objetos. Na IMO, este é um bom exemplo de semelhança (diferença) de design com outras linguagens OOP, como Java / C # / etc., Ou seja, à sua maneira especial de PHP (sempre que for para o bem ou para o valor).
Como outros já mencionaram, os objetos precisam de um __toStringmétodo para serem convertidos em uma string. Um objeto que não define esse método ainda pode produzir uma representação de sequência usando a função spl_object_hash .
Esta função retorna um identificador exclusivo para o objeto. Esse ID pode ser usado como uma chave de hash para armazenar objetos ou para identificar um objeto, desde que o objeto não seja destruído. Depois que o objeto é destruído, seu hash pode ser reutilizado para outros objetos.
Eu tenho uma classe Object básica com um __toStringmétodo que chama como padrão para md5(spl_object_hash($this))tornar a saída claramente única, pois a saída de spl_object_hash pode parecer muito semelhante entre os objetos.
Isso é particularmente útil para depurar código em que 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 as variáveis no log pode revelar a alteração do hash do objeto (ou não).
Alguns, se não todos, os métodos nas respostas anteriores falham quando a variável de cadeia pretendida possui um zero à esquerda , por exemplo, 077543 .
Uma tentativa de converter essa variável falha ao obter a sequência pretendida, porque a variável é convertida na base 8 (octal) .
Este é o PICNIC (problema na cadeira, não no computador), pois nada falha aqui ! print 077543;saídas 32611, portanto, este é o valor correto da sequência de $no. Ninguém espera que (string)+1retorne a string +1(ela retorna corretamente 1) nem que $no = 1+1; print (string)$no;produza 1+1. Notas: (1) O mesmo para hex ( $no=0xff;) também. (2) Você pode recuperar o valor octal com '0'.decoct($no);(3) $no="077543";mantém a liderança 0, "077543" + 1` dá 77544enquanto 077543+1(corretamente) dá 32612. (PS: não downvoted, pois isso err é comum)
Tino
4
Eu acho que essa pergunta é um pouco enganadora, pois toString () em Java não é apenas uma maneira de converter algo em uma String. É isso que a conversão via (string) ou String.valueOf () faz, e também funciona no PHP.
O que quero dizer com "fornecendo a representação String"? Imagine uma aula para uma biblioteca com milhões de livros.
A conversão dessa classe para uma String (por padrão) converterá os dados, aqui todos os livros, em uma string, para que a String seja muito longa e na maioria das vezes também não seja muito útil.
Para String, em vez disso, você terá a representação de String, ou seja, apenas o nome da biblioteca. Isso é mais curto e, portanto, fornece menos, mas informações mais importantes.
Ambas são abordagens válidas, mas com objetivos muito diferentes, nem é uma solução perfeita para todos os casos e você deve escolher sabiamente o que melhor se adapta às suas necessidades.
Claro, 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 concatenate an empty string works too
Todos esses métodos retornarão uma String, alguns deles usando __toString internamente e outros falharão em Objetos. Veja a documentação do PHP para mais detalhes.
Se você estiver convertendo algo diferente de tipos simples, como números inteiros ou booleanos, precisará escrever sua própria função / método para o tipo que está tentando converter; caso contrário, o PHP imprimirá apenas o tipo (como array, GoogleSniffer ou Bidê).
O PHP é digitado dinamicamente, assim como Chris Fournier disse: "Se você usá-lo como uma string, ela se torna uma string". Se você está procurando mais controle sobre o formato da string, printf é a sua resposta.
$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)."'";
Voto negativo, como eu realmente não tenho ideia do que você quer nos dizer. Usar strval()cordas é apenas uma completa perda de tempo.
Tino
cara, a coisa é supor que você tenha recebido um valor de string = quando for repetido, será "a string". Mas, quando você queria exibi-lo em javascript, precisava torná-lo 'stringx' ''
Daniel Adenew
Isso é extremamente perigoso (para não dizer: errado). Consulte stackoverflow.com/q/168214 ou stackoverflow.com/q/23740548 para entender como passar com segurança algo de PHP para JS! (Desculpe por ser um pouco fora de tópico: passar um var PHP para JS não fazia parte da pergunta.)
Tino
0
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 produzirá conteúdo para o log de erros:
Tente esta abordagem um pouco estranha, mas funcional, para converter a parte textual de stdClass em tipo de string:
$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)
. Descobri que as soluções sugeridasprint_r
e(string)var
trabalho bem para valores escalares e objetos simples. Para variáveis complexas, classes ou objetos, se um completo__toString()
não estiver definido, prefiro o mencionado acimajson_encode
.Respostas:
Você pode usar os operadores de transmissão :
Há mais detalhes sobre conversão e conversão de strings na seção Strings do manual do PHP, incluindo tratamento especial para booleanos e nulos.
fonte
Object of class Foo could not be converted to string
. Existe uma solução geral que pode converter qualquer coisa (matrizes + objetos + o que for) em uma string?__toString()
"Método Mágico", mas não mencionou isso. O usuário pediu uma resposta semelhante aotoString()
método Java e, em PHP, essa é a__toString()
função.Isso é feito com a tipografia:
Em uma classe, você pode definir o que é produzido usando o método mágico
__toString
. Um exemplo está abaixo:Mais alguns exemplos de conversão de tipos:
fonte
Use print_r :
Você também pode usá-lo como:
Isso será definido
$myText
como uma sequência, como:Use var_export para obter um pouco mais de informações (com tipos de variáveis, ...):
fonte
true
parte é essencial! Eu tentei vários métodos de conversão de strings, incluindoprint_r
e fiquei desapontado com todos eles, e então descobri otrue
parâmetro (leia a documentação para saber por que ele funciona).Você pode usar a conversão de texto:
ou StringValue:
ou SetType:
Todos eles trabalham para a mesma coisa em termos de malabarismo de tipos.
fonte
strval()
era para isso que eu estava procurando, porque queria usá-loarray_walk
. Por exemplo$array = array('cat',$object); array_walk($array,'strval'); // $array = array('cat',$object->__toString)
Um valor pode ser convertido em uma string usando a conversão (string) ou a função strval () . (Editar: Como Thomas também afirmou).
Também deve ser convertido automaticamente para você quando você o usa como uma string.
fonte
Você está procurando strval :
fonte
$strings = array_map('strval', $my_numbers);
array_map
e chamando chamadas em geral.Para primitivos, use
(string)$var
ou imprima essa variável imediatamente. O PHP é uma linguagem de tipo dinâmico e a variável será convertida para string em tempo real.Se você deseja converter objetos em cadeias, precisará definir o
__toString()
método que retorna a cadeia. Este método é proibido de lançar exceções.fonte
Colocá-lo entre aspas duplas deve funcionar:
fonte
Eu acho que vale a pena mencionar que você pode pegar qualquer saída (como
print_r
,var_dump
) em uma variável usando o buffer de saída:Graças a: Como capturar o resultado de var_dump em uma string?
fonte
$result = var_export($someVar, true)
sem ob.Outra opção é usar a função settype incorporada:
Na verdade, isso efetua uma conversão na variável, diferentemente da transmissão de texto, e permite que você tenha uma maneira geral de converter em vários tipos.
fonte
Além da resposta dada por Thomas G. Mayfield:
Se você seguir o link do manual de fundição de cordas, há um caso especial que é muito importante para entender:
(string) cast é preferível, especialmente se sua variável $ a for um objeto, porque o PHP seguirá o protocolo de conversão de acordo com seu modelo de objeto chamando o método mágico __toString () (se for definido na classe da qual $ a é instanciado )
PHP faz algo semelhante a
A operação de conversão de caracteres (string) é uma técnica recomendada para a programação PHP5 +, tornando o código mais orientado a objetos. Na IMO, este é um bom exemplo de semelhança (diferença) de design com outras linguagens OOP, como Java / C # / etc., Ou seja, à sua maneira especial de PHP (sempre que for para o bem ou para o valor).
fonte
Como outros já mencionaram, os objetos precisam de um
__toString
método para serem convertidos em uma string. Um objeto que não define esse método ainda pode produzir uma representação de sequência usando a função spl_object_hash .Eu tenho uma classe Object básica com um
__toString
método que chama como padrão paramd5(spl_object_hash($this))
tornar a saída claramente única, pois a saída de spl_object_hash pode parecer muito semelhante entre os objetos.Isso é particularmente útil para depurar código em que 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 as variáveis no log pode revelar a alteração do hash do objeto (ou não).
fonte
Alguns, se não todos, os métodos nas respostas anteriores falham quando a variável de cadeia pretendida possui um zero à esquerda , por exemplo, 077543 .
Uma tentativa de converter essa variável falha ao obter a sequência pretendida, porque a variável é convertida na base 8 (octal) .
Tudo isso fará com
$str
que o valor 32611 :fonte
print 077543;
saídas32611
, portanto, este é o valor correto da sequência de$no
. Ninguém espera que(string)+1
retorne a string+1
(ela retorna corretamente1
) nem que$no = 1+1; print (string)$no;
produza1+1
. Notas: (1) O mesmo para hex ($no=0xff;
) também. (2) Você pode recuperar o valor octal com'0'.decoct($no);
(3)$no="077543";
mantém a liderança0
, "077543" + 1` dá77544
enquanto077543+1
(corretamente) dá32612
. (PS: não downvoted, pois isso err é comum)Eu acho que essa pergunta é um pouco enganadora, pois toString () em Java não é apenas uma maneira de converter algo em uma String. É isso que a conversão via (string) ou String.valueOf () faz, e também funciona no PHP.
Observe que isso pode ser problemático, pois o Java é do tipo seguro ( veja aqui para mais detalhes ).
Mas, como eu disse, isso está lançando e, portanto, não é o equivalente ao toString () do Java.
toString em Java não apenas converte um objeto em uma String. Em vez disso, fornecerá a representação String . E é isso que __toString () no PHP faz.
E do outro lado:
O que quero dizer com "fornecendo a representação String"? Imagine uma aula para uma biblioteca com milhões de livros.
Ambas são abordagens válidas, mas com objetivos muito diferentes, nem é uma solução perfeita para todos os casos e você deve escolher sabiamente o que melhor se adapta às suas necessidades.
Claro, existem ainda mais opções:
Todos esses métodos retornarão uma String, alguns deles usando __toString internamente e outros falharão em Objetos. Veja a documentação do PHP para mais detalhes.
fonte
A documentação diz que você também pode:
É o mesmo que o elenco, mas acho que parece mais bonito.
Fonte:
fonte
As aspas duplas também devem funcionar ... ele deve criar uma string e APPEND / INSERT o valor STRING convertido de $ myVar entre 2 strings vazias.
fonte
Você sempre pode criar um método chamado .ToString ($ in) que retorne
fonte
Se você estiver convertendo algo diferente de tipos simples, como números inteiros ou booleanos, precisará escrever sua própria função / método para o tipo que está tentando converter; caso contrário, o PHP imprimirá apenas o tipo (como array, GoogleSniffer ou Bidê).
fonte
O PHP é digitado dinamicamente, assim como Chris Fournier disse: "Se você usá-lo como uma string, ela se torna uma string". Se você está procurando mais controle sobre o formato da string, printf é a sua resposta.
fonte
Você também pode usar a função PHP var_export .
fonte
fonte
strval()
cordas é apenas uma completa perda de tempo.Para objetos, talvez você não consiga usar o operador de conversão. Em vez disso, eu uso o
json_encode()
métodoPor exemplo, o seguinte produzirá conteúdo para o log de erros:
fonte
Tente esta abordagem um pouco estranha, mas funcional, para converter a parte textual de stdClass em tipo de string:
fonte
Eu uso variableToString . Ele lida com todos os tipos de PHP e é flexível (você pode estendê-lo, se quiser).
fonte